スレッドには、役割と原則に参加します

本論文では、コンテンツを紹介します
  1. Thread.join作用
  2. Thread.joinの原則
  3. Thread.joinを使用するとき
  4. スプレッド

1つの役割

各シングルスレッド、マルチスレッドCPUの状況は、競争の中で実行する権利を取得する場合は、順序が最初に次の子スレッドの再実装を実行して、子スレッドを聞かせてThread.joinメインスレッドによって制御子スレッドの実行順序を、確実にするために、ラップを提供しています待機中のオブジェクトの使用の原則の下を達成するために

dome1


public class ThreadJoin {

    static Thread thread1=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread1");
        }
    });
    static Thread thread2=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread2");
        }
    });
    static Thread thread3=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("thread3");
        }
    });

    public static void main(String[] args) throws InterruptedException {
        thread1.run();
        thread1.join();
        thread2.run();
        thread1.join();
        thread3.run();
        thread3.join();
    }

}

結果:

thread1
thread2
thread3

Process finished with exit code 0

:表示
すると、コードthread.joinなし();そうでないことを確実にするために、マルチスレッド実行では、出力が行う必要がある追加した後、無秩序です。

原則

原理の理解画像は参照
ここに画像を挿入説明
ソースコードを表示します。

....
public final void join() throws InterruptedException {
        join(0);
}
    ....
 public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (millis == 0) {
            while (isAlive()) {
                wait(0);
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }

要約:そのそれぞれのスレッドを確実にするために、第2のサブスレッドを実行するためにメインスレッドの再実行を実行するための参加ソース同期、待機()メソッドを待つを介してメインスレッドの呼び出しは、サブスレッドを実行すると、子スレッドのコールに参加、メインスレッドブロックになり見ることができますそしてその後、次のサブスレッドの実行を実行します

ときの使用であります

複数のスレッドが必要とする場合、そのような列として:論理演算を実行する子スレッド待ちThread.join用いることができる他のビジネス・ロジックを終え行う場合T1、T2スレッド、結果は以下のないT1 T1を必要
deom2を特に参照して

public void joinDemo(){
   //....
   Thread t=new Thread(payService);
   t.start();
   //.... 
   //其他业务逻辑处理,不需要确定t线程是否执行完
   insertData();
   //后续的处理,需要依赖t线程的执行结果,可以在这里调用join方法等待t线程执行结束
   t.join();
}

スプレッド

また、マルチスレッドチームFIFO順実行の仕方によって到達することができる
FIFO(先入れ先出し)マルチスレッド実行順序の下を使用し、)(スレッドプールのExecutors.newSingleThreadExecutorを通じて、アイデアシングルスレッドモードを

参考dome1修正

 ExecutorService executorService=Executors.newSingleThreadExecutor();
        executorService.execute( thread1);
        executorService.execute( thread2);
        executorService.execute( thread3);
        executorService.isShutdown();

出力契約

Tucaoを歓迎するために理解し適切でない場所があります~~

公開された10元の記事 ウォンの賞賛9 ビュー447

おすすめ

転載: blog.csdn.net/weixin_43829047/article/details/104903154
おすすめ