1. 程式人生 > >鎖標記如果過多,就會出現線程等待其他線程釋放鎖標記

鎖標記如果過多,就會出現線程等待其他線程釋放鎖標記

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=new
FileOutputStream("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 }

鎖標記如果過多,就會出現線程等待其他線程釋放鎖標記