java线程中notify_Java多线程中关于notify和wait
程序功能:4個(gè)線程,2個(gè)線程對(duì)某個(gè)數(shù)值進(jìn)行加1;2個(gè)線程進(jìn)行減1,要求該數(shù)在0和1之間切換。程序如下,大家看看問題出在哪里:
DecThread類,對(duì)sample的i進(jìn)行減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 類,對(duì)sample的i進(jìn)行加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();
}
}
總結(jié)
以上是生活随笔為你收集整理的java线程中notify_Java多线程中关于notify和wait的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: foreach去除重复元素java_Ja
- 下一篇: java语言适合编写什么_01--Jav