鎖
在多線程中存在著多個線程交替運行的過程中,如果出現(xiàn)需要某個線程暫?;蛘邥和:笾匦聠樱敲淳鸵\用到wait()以及notify(),但在此之前我們先要了解一個鎖的概念,只有被鎖標記的對象或者方法才能運用到鎖。
鎖的創(chuàng)建:
對一個對象加鎖:
objc o = new objc
synchronized (o){
}
對一個方法加鎖在之public 之前添加一個synchronized就行:
synchronized public void a(){
}
wait()
介紹完鎖之后我們就來說說鎖的用法,wait()用于停止當前進程,但是wait()方法以及notify()方法都必須寫在synchronized 塊內:
objc o = new objc
synchronized (o){
o.wait()
}
如果o一個線程o.wait()不是停止o這個線程而是停止o.wait所在的線程。
notify()
有暫停就有開始,notify就是用于開始同以對象中所鎖住的一個進程,notifyAll是解開所有,也就是說只要synchronized 后的對象是一樣在其他的類也可以打開其他類的當前對象的鎖。
objc o = new objc;
Thread a = new Thread();
public void run(){
synchronized (o){
o.wait();
}
}
Thread b = new Thread();
public void run(){
synchronized (o){
o.notify();
}
}
通過b線程中的run也是能對a中的wait解鎖的。