1. 程式人生 > 實用技巧 >判斷子序列

判斷子序列

執行緒通訊三個方法
* wait();//一旦執行此方法,當前執行緒就進入阻塞狀態,並釋放同步監視器
* notify();//一旦執行此方法,就會喚醒被wait的一個執行緒,如果有多個執行緒被wait,就會喚醒優先順序較高的
* notifyAll();//一旦執行此方法,就會喚醒被wait的所有執行緒
*
* 注意
* 1.wait\notify\notifyAll只能出現在同步程式碼塊或者同步方法中
* 2.wait\notify\notifyAll的呼叫者必須是同步程式碼塊或同步方法中的同步監視器

/**
 *
 * 執行緒通訊的例子,使兩個執行緒列印1-100,執行緒1,執行緒2交替列印
 * 執行緒通訊三個方法
 * wait();//一旦執行此方法,當前執行緒就進入阻塞狀態,並釋放同步監視器
 * notify();//一旦執行此方法,就會喚醒被wait的一個執行緒,如果有多個執行緒被wait,就會喚醒優先順序較高的
 * notifyAll();//一旦執行此方法,就會喚醒被wait的所有執行緒
 *
 * 注意
 * 1.wait\notify\notifyAll只能出現在同步程式碼塊或者同步方法中
 * 2.wait\notify\notifyAll的呼叫者必須是同步程式碼塊或同步方法中的同步監視器
 *
 *
 * * 
@author orz */ public class CommunicationTest { public static void main(String[] args) { Number number = new Number(); Thread t1=new Thread(number); Thread t2=new Thread(number); t1.setName("執行緒一"); t2.setName("執行緒二"); t1.start(); t2.start(); } }
class Number implements Runnable { private int number=1; @Override public void run() { while (true) { synchronized (this) { //喚醒一個執行緒 notify(); if (number<=100) { System.out.println(Thread.currentThread().getName()
+":"+number); number++; try { //使得執行緒進入阻塞狀態,釋放鎖 wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { break; } } } } }