1. 程式人生 > >java 執行緒間通訊的幾種方式

java 執行緒間通訊的幾種方式

1.如何讓兩個執行緒依次執行
假設有兩個執行緒,一個執行緒A,一個執行緒B,兩個執行緒分別依次列印 1-3 三個數字即可。

package Test;/**
/**
 * @author Administrator 
 * @createdate 2017-10-10
 */
public class demo1 {
    public static void main(String[] args){
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public
void run() { printNumber("A"); } }); Thread thread2 = new Thread(new Runnable() { @Override public void run() { printNumber("B"); } }); thread1.start(); thread2.start(); } private
static void printNumber(String threadname){ int i=0; while (i++ <3){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(threadname + " print:" +i); } } }

其中的 printNumber(String) 實現如下,用來依次列印 1, 2, 3 三個數字:通過將執行緒休眠的方式來控制兩個執行緒一次來執行。
執行的結果如下:可以看到執行的結果是兩個執行緒依次執行。這裡寫圖片描述

2.如何讓兩個執行緒交叉順序執行
我現在希望 A 在列印完 1 後,再讓 B 列印 1, 2, 3,最後再回到 A 繼續列印 2, 3。要如何來執行呢。看如下的程式碼

package Test;/**
/**
 * @author Administrator wangtao
 * @createdate 2017-10-10
 */
public class demo2 {
    public static void main(String[] args){
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                printNumber("A");
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("B 開始等待 A");
                try {
                    thread1.join();//我會等待執行緒1執行完成後再進行執行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                printNumber("B");
            }
        });

        thread1.start();
        thread2.start();
    }

    private  static void printNumber(String threadname){
        int i=0;
        while (i++ <3){
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(threadname + " print:" +i);
        }
    }
}

利用Thread.join()方法來實現,join()方法的作用是等待呼叫執行緒執行完之後再執行任務。看最後的執行結果知道,這裡寫圖片描述
B執行緒是等到A全部執行完成之後才開始執行。