標籤:nic comm nts nes als boolean java線程 new util
子線程先執行一段代碼,再主線程再執行一段代碼,兩個線程都迴圈執行50遍。用2個condition來實現,一個是子線程的condition,一個是主線程的condition,代碼如下:
package threadLock;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ConditionCommunication { public static void main(String[] args) { final Bussiness bus = new Bussiness(); //子線程開啟 new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 50; ++i) { bus.sub(); } } }).start(); //主線程開啟 for (int i = 0; i < 50; ++i) { bus.MAIN(); } }}class Bussiness { private boolean subShouldAble = true; private Lock lock = new ReentrantLock(); private Condition condition1 = lock.newCondition(); private Condition condition2 = lock.newCondition(); public void sub() { lock.lock(); //上鎖,防止主線程執行 if (!subShouldAble) {//如果不是子線程執行,則子線程等待 try { condition1.await(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 0; j < 10; j++) { System.out.println("sub squence is :" + j); } subShouldAble = false; condition2.signal(); //喚醒主線程執行 lock.unlock(); //解鎖 } public void MAIN() { lock.lock(); //上鎖,防止子線程執行 while (subShouldAble) { //如果是子線程執行,則主線程等待 try { condition2.await(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 0; j < 30; j++) { System.out.println("main squence is :" + j); } subShouldAble = true; condition1.signal(); //喚醒主線程 lock.unlock(); //解鎖 }}
java線程condition