java线程中notify_Java多线程中关于notify和wait
程序功能:4個線程,2個線程對某個數值進行加1;2個線程進行減1,要求該數在0和1之間切換。程序如下,大家看看問題出在哪里:
DecThread類,對sample的i進行減1的線程:
public?class?DecThread?extends?Thread{
private?Sample?sample;
public?DecThread(Sample?sample,?String?name){
super(name);
this.sample?=?sample;
}
@Override
public?void?run()?{
for(int?i=0;?i<20;?i++){
sample.dec();
}
}
}
IncThread 類,對sample的i進行加1的線程:
public?class?IncThread?extends?Thread{
private?Sample?sample;
public?IncThread(Sample?sample,?String?name){
super(name);
this.sample?=?sample;
}
@Override
public?void?run()?{
for(int?i=0;?i<20;?i++){
sample.inc();
}
}
}
Sample類:
public?class?Sample?{
int?i?=?0;
public?synchronized?void?inc()?{
try?{
while?(i?==?1)?{
wait();
}
i++;
System.out.println(Thread.currentThread().getName()?+?"-"?+?i);
notify();
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
public?synchronized?void?dec()?{
try?{
while?(i?==?0)?{
wait();
}
i--;
System.out.println(Thread.currentThread().getName()?+?"-"?+?i);
notify();
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
}
測試類TestIncDec :
public?class?TestIncDec?{
public?static?void?main(String[]?args)?{
Sample?sample?=?new?Sample();
IncThread?inc1?=?new?IncThread(sample,"inc1");
IncThread?inc2?=?new?IncThread(sample,"inc2");
DecThread?dec1?=?new?DecThread(sample,"dec1");
DecThread?dec2?=?new?DecThread(sample,"dec2");
inc1.start();
inc2.start();
dec1.start();
dec2.start();
}
}
總結
以上是生活随笔為你收集整理的java线程中notify_Java多线程中关于notify和wait的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: foreach去除重复元素java_Ja
- 下一篇: java 执行cmd windows_W