帮忙写个小程序 实现类A中队列对象的读/写方法,其中line的长度最大为10,写的数据(整数)追加到line的尾部,读操作取出队列的第一个数据。并实现生产考和消费者两个线程类,生产考往A中写数据(递增的整数),消费考从A中取出数据打打印,要支持多个生产者和消费者。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 刚好以前写过,下面是源码:此文章的目的在于利用线程的互斥,解决生产者消费者问题。其中使用了关键字sychronized。线程的内容可以一样,但是对应不同的内存地址。运行起来相互独立,是两个完全独立的进程。producer.java文件:package ProducerConsumer;class Producer extends Thread{ CircularBuffer cbp=null; Producer(CircularBuffer cb){cbp=cb;} public void run(){ for(int i=0;i<=50000;i++) try{ cbp.put(i); } catch (Exception err){ //System. } } // public static void main(String[] args) {}}ProCum文件:package ProducerConsumer;import java.io.*;class ProCum{ public static void main(String[] args){ CircularBuffer cb=new CircularBuffer(20); //因为要调用的两个方法put和get是排斥,所以调用时由同一个对象调用,所以 //都是cb,注意注意!!!!!! Producer pro=new Producer(cb); Consumer con=new Consumer(cb);// Thread a=null; Thread b=null; a=new Thread(pro); b=new Thread(con); b.start(); a.start(); } }Consumer.java文件:package ProducerConsumer;class Consumer extends Thread{ CircularBuffer cbc=null; Consumer(CircularBuffer cb) {cbc=cb;} public void run(){ for(int i=0;i<=50000;i++) try{ cbc.get(); } catch (Exception err){ } } }CircularBuffer.java 文件:package ProducerConsumer;import java.io.*;class CircularBuffer{ int bufsize; int[] store; int numOfEntries=0; int front=0; int back=0; CircularBuffer(int n) { bufsize=n; store=new int[bufsize]; } synchronized void put(int obj)throws Exception{ if(numOfEntries==bufsize) { System.out.println("Producer waiting"); wait(); } store[back]=obj; back++; if(back==bufsize) back=0; else {numOfEntries++; System.out.println("putting "+ obj); notify(); } } synchronized int get() throws Exception{ int result=0; if(numOfEntries==0) { System.out.println("Consumer waiting"); wait(); } else{ result=store[front]; front++; if(front==bufsize) front=0; numOfEntries--; System.out.println("getting "+result);//; notify();} return result; } public static void main(String[] args) {} } 求<JFC核心编程> java问题 讨论:快速学习java se的技术路线 初学者请教连接SQLServer2000数据库问题 如何在POI中使用读取字符串的方法来读取单元格中的数值类型的值 谢谢blackhost(剑心)解决问题 import问题,希望大家关注一下 请问action(Event e,Object o)方法和actionPerformed(ActionEvent e)方法有什么区别? 这样的工具栏用什么做 局域网聊天问题 jre和tomcat的问题 在java里如何删除一个有只读属性的文件夹?
此文章的目的在于利用线程的互斥,解决生产者消费者问题。其中使用了关键字sychronized。线程的内容可以一样,但是对应不同的内存地址。运行起来相互独立,是两个完全独立的进程。producer.java文件:package ProducerConsumer;
class Producer extends Thread
{
CircularBuffer cbp=null;
Producer(CircularBuffer cb){cbp=cb;}
public void run(){
for(int i=0;i<=50000;i++)
try{
cbp.put(i);
}
catch (Exception err){
//System.
}
}
// public static void main(String[] args) {}
}
ProCum文件:package ProducerConsumer;
import java.io.*;
class ProCum{
public static void main(String[] args){
CircularBuffer cb=new CircularBuffer(20);
//因为要调用的两个方法put和get是排斥,所以调用时由同一个对象调用,所以
//都是cb,注意注意!!!!!!
Producer pro=new Producer(cb);
Consumer con=new Consumer(cb);
//
Thread a=null;
Thread b=null;
a=new Thread(pro);
b=new Thread(con);
b.start();
a.start();
}
}Consumer.java文件:package ProducerConsumer;
class Consumer extends Thread
{
CircularBuffer cbc=null;
Consumer(CircularBuffer cb)
{cbc=cb;}
public void run(){
for(int i=0;i<=50000;i++)
try{
cbc.get();
}
catch (Exception err){
}
}
}
CircularBuffer.java 文件:package ProducerConsumer;
import java.io.*;
class CircularBuffer
{
int bufsize;
int[] store;
int numOfEntries=0;
int front=0;
int back=0;
CircularBuffer(int n)
{
bufsize=n;
store=new int[bufsize];
}
synchronized void put(int obj)throws Exception{
if(numOfEntries==bufsize)
{
System.out.println("Producer waiting");
wait();
}
store[back]=obj;
back++;
if(back==bufsize) back=0;
else {numOfEntries++;
System.out.println("putting "+ obj);
notify();
}
}
synchronized int get() throws Exception{
int result=0;
if(numOfEntries==0)
{
System.out.println("Consumer waiting");
wait();
}
else{
result=store[front];
front++;
if(front==bufsize) front=0;
numOfEntries--;
System.out.println("getting "+result);//;
notify();
}
return result;
}
public static void main(String[] args)
{
}
}