java線程間通信1--簡單實例
阿新 • • 發佈:2018-02-27
.com getname com spa http 主線程 strong art 子線程
線程通信
一、線程間通信的條件
1、兩個以上的線程訪問同一塊內存
2、線程同步,關鍵字 synchronized
二、線程間通信主要涉及的方法
wait(); ----> 用於阻塞進程
notify(); ----> 用於喚醒進程
notifyAll(); ----> 用於喚醒所有進程
三、線程通信的圖解
四、線程通信的實例代碼
1 //主線程 2 public class ThreadMain { 3 4 public static void main(String[] args) throwsInterruptedException { 5 Buffer buffer = new Buffer(); 6 7 Thread_one thread_one = new Thread_one(buffer); 8 thread_one.start(); //啟動子線程 9 10 Thread.sleep(1000); //主線程睡眠1秒 11 12 String name = Thread.currentThread().getName();13 System.out.println(name); 14 buffer.doNotify(); //喚醒子線程 15 } 16 }
1 //要訪問的內存區 2 public class Buffer { 3 4 //進行包裝 5 public synchronized void doWait() { 6 try { 7 wait(); 8 } catch (InterruptedException e) { 9 // TODO Auto-generated catch block10 e.printStackTrace(); 11 } 12 } 13 public synchronized void doNotify() { 14 notify(); 15 } 16 }
1 //子線程 2 public class Thread_one extends Thread{ 3 private Buffer buffer; 4 public Thread_one(Buffer buffer) { 5 this.buffer = buffer; 6 } 7 @Override 8 public void run() { 9 //子線程睡眠 10 buffer.doWait(); 11 //具體操作,顯示當前線程名 12 String name = Thread_one.currentThread().getName(); 13 System.out.println(name); 14 } 15 }
java線程間通信1--簡單實例