建立ABC三條執行緒 保證 A執行緒 列印 我 B執行緒列印愛 C執行緒 列印你 如此需要 10個我愛你
阿新 • • 發佈:2018-12-14
public class DoSome implements Runnable{ //三個變數 三條執行緒之間切換執行 一把鎖是不夠的 2把鎖把鎖 物件有鎖的定義 Object物件 private String word;//執行緒要列印的字 private Object prev;//當前執行緒的上一個執行緒要持有的鎖 private Object current;//當前執行緒所要持有的鎖 public void run() { for(int i=0;i<10;i++){ synchronized (prev){ //鎖住當前執行緒的上一個執行緒 synchronized (current){ //鎖住當前執行緒 System.out.print(word); //輸出要列印的文字 current.notify(); //喚醒當前的執行緒 } try { prev.wait(); //是當前執行緒的上一個執行緒進入阻塞狀態,等待 } catch (InterruptedException e) { e.printStackTrace(); } } } } //建立建構函式,傳入形參 public DoSome(String word, Object prev, Object current) { this.word = word; this.prev = prev; this.current = current; } //列印字的操作 }
//建立測試類 public class Test { public static void main(String[] args) throws InterruptedException { Object a =new Object(); Object b=new Object(); Object c=new Object(); //建立三條執行緒,並且傳入引數 Thread t1=new Thread(new DoSome("我",c,a)); Thread t2=new Thread(new DoSome("愛",a,b)); Thread t3=new Thread(new DoSome("你",b,c)); //為保證在控制檯上列印的字滿足要求,使第一條執行緒列印完畢後進入阻塞狀態,第二條執行緒列印結束後也進入阻塞狀態 t1.start(); Thread.sleep(1000); t2.start(); Thread.sleep(1000); t3.start(); } }