合併を実現するいくつかの方法について簡単に述べる.


JAvaの同時実現の7つの方式Javaマルチスレッドの実現方式は大体7つの実現方式がある:Threadクラスを継承し、Runnableインターフェースを実現し、Callableインターフェースを実現し、スレッドプールを使用し、Timerタイマーを使用し、内部クラス実現、jdk 1.8のstream
1.継承ThreadクラスThreadクラスは本質的にRunnableインタフェースを実装したインスタンスであり、スレッドのインスタンスを表す.起動方法は、Threadクラスのstart()インスタンスを継承する方法です.run()メソッド(書き換え)を実行します.新しいスレッドを起動し、独自の定義を実行できます.たとえば、次のようになります.
//実装方法のクラスpublic class Demo 1 extends Thread{
public void run(){
    System.out.println("  Thread ");
}

}
//実行方法public static void main(String[]args){
    Demo1 demo1=new Demo1();
    demo1.start();

}
実行結果:Threadクラスを継承
2.Runnableインタフェースの実装javaは単一継承であるため,通常開発ではインタフェースを用いた実装が提唱されている.Runnableインタフェースを実装するrunメソッドを介してマルチスレッドクラスを実装する必要がある.Threadのstart()メソッドで起動します.たとえば、次のようにします.
//実装方法クラス:public class Demo 2 implements Runnable{
@Override
public void run() {
    System.out.println("  runnable  ");
}


//実行方法:public static void main(String[]args){
    Demo2 demo2=new Demo2();
    Thread thread=new Thread(demo2);
    thread.start();

}
実行結果:runnableインタフェースの実装
3.内部クラスによってマルチスレッドを実現することは、Threadクラスのstart()メソッドによって直接実現することができる.なぜなら、ThreadクラスはRunnableインタフェースを実現し、runメソッドを書き直し、runメソッドで独自の論理を実現するからである.例えば、
//ここではCountDownLatchを介してブロックを行い、2つのスレッドの起動を観察し、public static CountDownLatch countDownLatch=new CountDownLatch(2);
public static void main(String[] args) {
    new Thread(()->{
        countDownLatch.countDown();
        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("T1");
    }).start();

    new Thread(()->{
        countDownLatch.countDown();
        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("T2");
    }).start();

}
  :
   :
T2
T1
   :
T1
T2

4.Callableインタフェースを実装Callableインタフェースを実装するcallメソッドにより、FutureTaskのget()メソッドによりcallメソッドの戻り値を取得することができ、具体的には以下のように実現する.
//実装クラスメソッド:public class Demo 3 implements Callable{
@Override
public Object call() {
    return "1";
}

}
//実行方法:public static void main(String[]args){
    //       
    Callable demo3=new Demo3();
    FutureTask oneTask = new FutureTask(demo3);
    Thread thread=new Thread(oneTask);
    thread.start();
    Object o = null;
    try {
        //     
        o = oneTask.get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    System.out.println(o);

}
実行結果:
5.スレッドプールによるマルチスレッドスレッドプールの実装は、異なるシーンに基づいて異なるスレッドプールを選択して実装できます.ここでは、そのうちの1つだけを使用して説明します.その後、スレッドプールに関する個別の説明を個別に書きます.
//実装コードは以下の通り:public class Demo 5{
public static void main(String[] args) {
    ExecutorService executorService = Executors.newFixedThreadPool(5);
    for(int i=0;i<5;i++){
        int finalI = i;
        executorService.execute(()-> {
            System.out.println(finalI);
        });
    }
}

}
実行結果:
6.Timerタイマによるマルチスレッドの実現はTimerにとってスケジューラであり、TimerTaskはrunメソッドを実現するクラスにすぎないが、具体的なTimerTaskはあなた自身で実現する必要があり、パラメータによって異なる実行方法が存在する.例えば、遅延タイミングタスクのように:
//具体コードは以下の通り:public class Demo 6{
public static void main(String[] args) {
    Timer timer=new Timer();
    timer.schedule(new TimerTask(){
        @Override
        public void run() {
            System.out.println(1);
        }
    },2000l,1000l);
}

}
実行結果:
7.jdk1.8 streamによりマルチスレッドjdk 1を実現する.8 APIは、ストリームStreamという新しい抽象を追加し、データを宣言的に処理することができます.Streamは、SQL文を使用してデータベースからデータをクエリーするような直感的な方法を使用して、Javaコレクションの演算と表現の高次抽象化を提供します.具体的な単純コードは以下のように実現される.
//コード実装:public class Demo 7{
//         ,  countDownLatch    
static CountDownLatch countDownLatch=new CountDownLatch(6);
public static void main(String[] args) {
    List list=new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);

    list.parallelStream().forEach(p->{
        //              ,    
        countDownLatch.countDown();
        try {
            System.out.println("        ");
            Thread.sleep(10000);
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(p);
    });
}

}
実行結果:実行開始、すべての要求が印刷に入りました.スレッド実行はここまで、スレッド実行はここまで、スレッド実行はここまで、スレッド実行はここまで、スレッド実行はここまで、スレッド実行はここまで、スレッド実行は10 s待ってから、同時に結果を印刷します.無秩序な印刷結果は以下の通りです.