锁标记如果过多,就会出现线程等待其他线程释放锁标记,而又都不释放自己的锁标记供其他线程运行的状况。就是死锁。
死锁的问题通过线程间的通信的方式进行解决。
线程间通信机制实际上也就是协调机制。
线程间通信使用的空间称之为对象的等待队列,则个队列也是属于对象的空间的。
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(' '); 16 } 17 f.close(); 18 }catch(IOException e) 19 { 20 System.out.println(e.toString()); 21 } 22 } 23 24 }