線程和多線程,死鎖。

關於這個問題,專業認識已經總結。http://www.importnew.com/21866.html

synchronized關鍵字可以修飾對象,方法,或者是代碼塊。
每一個對象都有一個對象鎖。一旦觸發這個關鍵字,那麼對象就被鎖住了,不可以再訪問含有synchronized的語句,單數可以訪問非synchronized的語句。

sleep()和wait()的區別,可能前者到點了就會自動喚醒線程,並且作用對象是線程。後者必須要this.notify()喚醒,作用對象是 一個對象。

public synchronized char pop(char c){}

生成隨機大寫字母c=(char)(Math.random()26+'A'); //沒錯這裏就是26,因爲random的範圍是>=0&&<1 所以加上‘A’之後就從A到Z。

每個對象都有一個鎖來控制同步訪問,Synchronized關鍵字可以和對象的鎖交互,來實現同步方法或同步塊。sleep()方法正在執行的線程主動讓出CPU(然後CPU就可以去執行其他任務),在sleep指定時間後CPU再回到該線程繼續往下執行(注意:sleep方法只讓出了CPU,而並不會釋放同步資源鎖!!!);wait()方法則是指當前線程讓自己暫時退讓出同步資源鎖,以便其他正在等待該資源的線程得到該資源進而運行,只有調用了notify()方法,之前調用wait()的線程纔會解除wait狀態,可以去參與競爭同步資源鎖,進而得到執行。(注意:notify的作用相當於叫醒睡着的人,而並不會給他分配任務,就是說notify只是讓之前調用wait的線程有權利重新參與線程的調度);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章