急需用信号量解决“生产者消费者”问题,请高手指点,最好给出源码,谢谢。(分不够可以再加) http://www-900.ibm.com/developerWorks/cn/java/j-prodcon/index.shtml 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; } } 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){ } } } 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(); } } 高分求一SWT编译不通过 两个Java程序的区别 这一段代码中的 << 是什么意思 急急急:Java打印,设置打印纸大小 JAVA编程思想》的包的问题? java.lang.String最多能存储多长的字符串? 怎样看一个可执行的程序的代码?(用java写的) java项目中有无.setting文件夹的区别 请教熟悉WEBLOGIC的高手 有关ACCP和系统分析员 谁能回答,,接分--- 高分求游戏中图片旋转算法! 关注有分!
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;
}
}
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){
}
}
}
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();
}
}