如果lock在lock.lock();之後進入lock.wait();
那麼所有的獲取lock.lock();的**都會被阻塞。
但是synchronized (lock) 這個**可以被執行,且只有執行喚醒之後才能使得程式繼續走。
看**class r1 implements runnable
} catch (interruptedexception e) finally
system.out.println("over");}}
class r2 implements runnable }}
如果先執行r1在執行r2
就無法結束程式,
如果吧r2的獲取鎖的**注釋掉就可以
但是使用了lock最好使用private static condition canget = lock.newcondition();去等待和喚醒
**如下
public class mylock_1
sleep(2);
thread t2 = new thread[n2];
for (int i = 0; i < n2; i++)
}public static void main(string args)
class r1 implements runnable catch (interruptedexception e)
finally
system.out.println("over");}}
class r2 implements runnable
}public void sleep(int sec) catch (interruptedexception e) }}
Java多執行緒 Lock
reentrantlock可以和synchronized達到一樣的效果,並且擴充套件功能上也更加強大,而且使用更加靈活。lock lock new reentrantlock 加鎖 lock.lock 取消鎖 lock.unlock 等待通知模式 synchronized與wait 和notify方...
Java 多執行緒之Lock的用法
lock 為執行緒加鎖解鎖,因為多個執行緒在訪問同乙個資源時,乙個資源不能同時給兩個執行緒進行讀寫操作.所以使用執行緒同步的方式來對資源進行訪問限制.下面來看lock的用法 使用流程 1.建立reentrantlock物件,首先,這個reentrantlock類 重入鎖 是一種遞迴無阻塞的同步機制的...
java執行緒wait與sleep的區別
1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...