JAVA——マルチスレッドを実現


Java仮想マシンはアプリケーションが同時に複数のスレッドを実行することを許可し、マルチスレッドの実現には一般的に3つの方式がある:1、Threadクラスを継承し、run()メソッドを書き換える
class MyThread extends Thread {
    @Override
    public void run() {
        //        
    }
}
---------------------------------------------
//  :
    MyThread thread=new MyThread();
    thread.start();

スレッドを起動する唯一の方法はThreadクラスのstart()方式です.注意:start()を呼び出す方法は、直ちにマルチスレッドコードを実行するのではなく、そのスレッドを実行可能状態にし、実行時間はシステムによって決定されます.
2.Runnableインタフェースを実現し、そのインタフェースを実現するrun()方法
class MyThread implements Runnable {
    @Override
    public void run() {
        //        
    }
}
-------------------------------------------
//  
    MyThread thread=new MyThread();
    Thread t=new Thread(thread);
    t.start;

Threadクラスを継承してもRunnableインタフェースを使用しても、最終的にはThreadのオブジェクトのAPIによってスレッドを制御します.
別の形式(匿名の内部クラス、比較的一般的):
new Thread(new Runnable() {
    @Override
    public void run() {
        //        
    }
}).start();

3、Callableインタフェースを実現し、Callメソッドを書き換えるCallableインタフェースはRunnableインタフェースの機能と似ているが、Runnableよりも強い違いがある:1、Callableはタスク終了後に戻り値を提供し、Runnableはこの機能を提供できない2、Callableのcall()メソッドは異常を投げ出すことができ、Runnableのrun()メソッド不可3、Callableを実行すると、非同期計算の結果を示すFutureオブジェクトが得られ、計算が完了したかどうかを確認する方法が提供されます.Futureを使用してターゲットスレッド呼び出しcall()メソッドの場合を監視し、Futureのget()メソッドを呼び出して結果を取得し、call()メソッドが結果を返すまで現在のスレッドがブロックされます.
public class CallableTest implements Callable<String>{
    public String call()throws Exception{
        //  
        return null;
    }
}
----------------------------------------------------------------------
//  
ExecutorService threadPool=Executors.newSingleThreadExecutor();
Future<String> future=threadPool.submit(new CallableTest());
try{
    future.get();//      ,      
}catch(Exception e){
    e.printStackTrace();
}

マルチスレッドを実装する必要がある場合はRunnableインタフェースを実装する方法を推奨します.