鎖標記如果過多,就會出現線程等待其他線程釋放鎖標記
阿新 • • 發佈:2018-08-05
all 退出 自己的 void output div 釋放 其他 oid
鎖標記如果過多,就會出現線程等待其他線程釋放鎖標記,而又都不釋放自己的鎖標記供其他線程運行的狀況。就是死鎖。
死鎖的問題通過線程間的通信的方式進行解決。
線程間通信機制實際上也就是協調機制。
線程間通信使用的空間稱之為對象的等待隊列,則個隊列也是屬於對象的空間的。
Object類中又一個wait(),在運行狀態中,線程調用wait(),此時表示著線程將釋放自己所有的鎖標記,同時進入這個對象的等待隊列。
等待隊列的狀態也是阻塞狀態,只不過線程釋放自己的鎖標記。
Notify()
如果一個線程調用對象的notify(),就是通知對象等待隊列的一個線程出列。進入鎖池。如果使用notifyall()則通知等待隊列中所有的線程出列。
1 package TomTexts; 2 import java.io.*; 3 public class TomTexts_35 { 4 5 public static void main(String args[]) 6 { byte buffer[]=new byte[128]; 7 System.out.println("請輸入數據,回車後保存到文件test.txt"); 8 System.out.println("輸入 # 則退出!"); 9 try{ 10 FileOutputStream f=newFileOutputStream("test.txt"); 11 while(true){ 12 int n=System.in.read(buffer); 13 if(buffer[0]==‘#‘ ) break; 14 f.write(buffer,0,n-1); 15 f.write(‘\n‘); 16 } 17 f.close(); 18 }catch(IOException e)19 { 20 System.out.println(e.toString()); 21 } 22 } 23 24 }
鎖標記如果過多,就會出現線程等待其他線程釋放鎖標記