1. 程式人生 > >java多執行緒--幾個多執行緒面試題小結

java多執行緒--幾個多執行緒面試題小結

複製程式碼
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 void
main(){ 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(); } } }
複製程式碼