1. 程式人生 > >java 多執行緒(1) wait和notifier例項

java 多執行緒(1) wait和notifier例項

本程式為實現兩個執行緒來回呼叫,要求main執行緒呼叫100次,sub執行緒呼叫10次,以上步驟反覆50次。
主要思想是將控制執行緒同步的程式碼寫在資源類內,而不是run方法內

具體程式碼

Business.java


/**
 * Created by lance on 2017/12/18.
 */
public class Business {
    public static boolean isSub=false;//判斷是否輪到sub執行緒執行

    public synchronized void sub(int i){
        if(!isSub){
            try
{ this.wait();//等待main執行完喚醒自己 } catch (InterruptedException e) { e.printStackTrace(); } } for(int j=0;j<10;j++){ System.out.println("sub"+j+", loop "+i); } isSub=false; this.notify();//喚醒main } public
synchronized void main(int i){ if(isSub){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for(int j=0;j<100;j++){ System.out.println(" Main"+j+", loop "
+i); } isSub=true; this.notify(); } }

ThreadMain.java

public class ThreadMain extends Thread {
    Business business;
    public ThreadMain(Business business){
        this.business=business;
    }
    @Override
    public void run(){
        for(int i=0;i<50;i++){
            business.main(i);
        }
    }
}

ThreadSub.java

public class ThreadSub extends Thread{
    Business business;
    public ThreadSub(Business business){
        this.business=business;
    }
    @Override
    public void run(){
        for(int i=0;i<50;i++){
            business.sub(i);
        }
    }
}

Client.java

public class Client {
    public static void main(String args[]){
        Business business=new Business();
        ThreadMain threadMain=new ThreadMain(business);
        ThreadSub threadSub=new ThreadSub(business);
        threadMain.start();
        threadSub.start();
    }
}