1.进程阻塞在wait()后,当被恢复时,应该从哪一句开始继续运行?
2.notify()的具体工作机制是怎样的?好象在SCR里看不到它的代码。
3.notify()唤醒的,是相同对象产生的那些进程,那么用JAVA如何实现唤醒不同对象产生的进程?比如生产者与消费者问题,生产者进程如何唤醒消费者进程?
多谢!
2.notify()的具体工作机制是怎样的?好象在SCR里看不到它的代码。
3.notify()唤醒的,是相同对象产生的那些进程,那么用JAVA如何实现唤醒不同对象产生的进程?比如生产者与消费者问题,生产者进程如何唤醒消费者进程?
多谢!
解决方案 »
- 类问题
- 怎么做JCheckBox的全选和全不选的按钮
- 为什么??java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
- 求一个JAVA写的MIS系统,ACCESS,或MSSQL数据库的,学习用!!谢谢
- 长整型转整型
- 每日一问,JAVAC如何显示报错的信息为中文
- Swing中如何改变图标的颜色?
- SessionBean里是否可以不用关闭数据库连接?
- 请问有谁有jbuilder3.5的密码啊
- 一个语法问题
- java处理excel文件的问题
- 关于对象,到集合里进行判断的方法
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)
{
}
}