当前位置: 技术问答>java相关
自己写咳一小段测对象lock的片断,可是怎么不能正常运行,高手指点。。
来源: 互联网 发布时间:2015-07-30
本文导语: public class temp{ int num; boolean canReceive=false; public synchronized void receive(){ while(canReceive==false){ try{ wait(); }catch(InterruptedException e){} } System.out.println("receive num= "+num); canReceive=false; notify(); } public syn...
public class temp{
int num;
boolean canReceive=false;
public synchronized void receive(){
while(canReceive==false){
try{
wait();
}catch(InterruptedException e){}
}
System.out.println("receive num= "+num);
canReceive=false;
notify();
}
public synchronized void send(){
while(canReceive==true){
try{
wait();
}catch(InterruptedException e){}
}
System.out.println("produce num");
// try{
// Thread.sleep(500);
// }catch(InterruptedException e){}
num++;
canReceive=true;
notify();
}
public static void main(String args[]){
temp t=new temp();
t.receive();
//t.send();
}
}
int num;
boolean canReceive=false;
public synchronized void receive(){
while(canReceive==false){
try{
wait();
}catch(InterruptedException e){}
}
System.out.println("receive num= "+num);
canReceive=false;
notify();
}
public synchronized void send(){
while(canReceive==true){
try{
wait();
}catch(InterruptedException e){}
}
System.out.println("produce num");
// try{
// Thread.sleep(500);
// }catch(InterruptedException e){}
num++;
canReceive=true;
notify();
}
public static void main(String args[]){
temp t=new temp();
t.receive();
//t.send();
}
}
|
当然了,这是在一个线程里啊,怎么解锁?
|
首先你的程序是不会正确执行的,永远会是在 receive 中的 while 中。
请你将receive 和 send 写到两个独立的 runable 里。 canReceive 写到一个公共的static 变量中才可以。
可以参考一下 经典的生产者消费者的问题。
请你将receive 和 send 写到两个独立的 runable 里。 canReceive 写到一个公共的static 变量中才可以。
可以参考一下 经典的生产者消费者的问题。