java 线程 wait 一定要同步_Java 线程中调用wait为什么一定要在同步代码块中?
展開全部
wait是讓使用wait方法的對(duì)象等待,暫時(shí)先把對(duì)象鎖給讓出來,給其它持有該鎖的對(duì)象用,其它對(duì)象用完后再636f707962616964757a686964616f31333337396235告知(notify)等待的那個(gè)對(duì)象可以繼續(xù)執(zhí)行了,因此,只有在synchronized塊中才有意義(否則,如果大家并不遵循同步機(jī)制,那還等誰呢?根本沒人排隊(duì),也就談不上等待和喚醒了)
以下是一個(gè)例子,用以展示這種機(jī)制:public?class?ThreadA?{
public?static?void?main(String[]?args)?{
ThreadB?b?=?new?ThreadB();
b.start();//主線程中啟動(dòng)另外一個(gè)線程
System.out.println("b?is?start....");
//括號(hào)里的b是什么意思,應(yīng)該很好理解吧
synchronized(b)?{
try?{
System.out.println("Waiting?for?b?to?complete...");
b.wait();//這一句是什么意思,究竟誰等待?
System.out.println("ThreadB?is?Completed.?Now?back?to?main?thread");
}catch?(InterruptedException?e){}
}
System.out.println("Total?is?:"?+?b.total);
}
}
class?ThreadB?extends?Thread?{
int?total;
public?void?run()?{
synchronized(this)?{
System.out.println("ThreadB?is?running..");
for?(int?i=0;?i<=100;?i++?)?{
total?+=?i;
}
System.out.println("total?is?"?+?total);
notify();
}
}
}
運(yùn)行結(jié)果:
b is start....
Waiting for b to complete...
ThreadB is running..
total is 5050
ThreadB is Completed. Now back to main thread
Total is :5050
總結(jié)
以上是生活随笔為你收集整理的java 线程 wait 一定要同步_Java 线程中调用wait为什么一定要在同步代码块中?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 更新文件内容吗_java Io
- 下一篇: centos运行java图形化界面_Ce