java多執行緒--幾個多執行緒面試題小結
阿新 • • 發佈:2019-02-02
package com.wang.reflect; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //編寫功能類,實現子執行緒和主執行緒的功能 class Function{ private boolean flag=false; Lock lock=new ReentrantLock(); Condition con=lock.newCondition();//子執行緒要實現的功能 public void sub(){ lock.lock(); try { while(flag){ try { con.await(); } catch (InterruptedException e) { e.printStackTrace(); } }for(int i=0;i<10;i++){ //for迴圈內定義子執行緒的功能,這裡簡單的假設為列印一句話,主執行緒同理 System.out.println("sub"+i); } flag=true; con.signal(); } finally{ lock.unlock(); } } //主執行緒要實現的功能 public synchronized voidmain(){ lock.lock(); try { while (!flag) { try { con.await(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int i = 0; i < 20; i++) { System.out.println("main" + i); } flag = false; con.signal(); } finally{ lock.unlock(); } } } public class Demo01 { public static void main(String[] args) { final Function f=new Function(); new Thread( new Runnable(){ @Override public void run() { for(int i=0;i<50;i++){ f.sub(); } } } ).start(); for(int i=0;i<50;i++){ f.main(); } } }