マルチスレッドを実現する3つの方法:
1、継承スレッドは、スレッドを開始するstart()メソッドを呼び出し、run()メソッドをオーバーライドします。
図2に示すように、対応するスレッドに新しいスレッド(Runnableをターゲット).start()メソッドを起動し、run()メソッドを実装する、のRunnableを実装します。
3、FutureTaskを呼び出し()メソッドを実装するラッパー、および呼び出し()メソッドが値を返す、あなたが例外をスローすることができます使用して呼び出し可能インターフェースを実装します。
1 // 实现呼び出し可能接口
2 クラステスト実装呼び出し可能<整数> {
3
4 @Override
5 パブリック整数コール()はスロー例外{
6 リターン 1024 。
7 }
8 }
差呼び出し可能インタフェース、Runnableインタフェース。
(1)の戻り値があるか否か
(2)例外か否か
(3)A法は、RUNは、同じではない達成する際に呼び出しメソッド
マルチスレッドの実装呼び出し可能インターフェースを実装します。
1つの インポートjava.util.concurrent.Callable。
2 インポートjava.util.concurrent.ExecutionException。
3 インポートjava.util.concurrent.FutureTask。
4
5 パブリック クラスThreadPro {
6 パブリック 静的 ボイドメイン(文字列[]引数)がスローExecutionException、InterruptedExceptionある{
7 テストテスト= 新しいテスト();
8 FutureTask futureTask = 新しいFutureTask(テスト)。
9 新しいスレッド(futureTask、 "A线程" ).start();
10 System.out.println( "......" );
11 のSystem.out.println(futureTask.get())。
12 }
13 }
14の
15 // 实现呼び出し可能接口
16 クラステスト実装呼び出し可能<整数> {
17
18 @Override
19 公衆整数コール()がスロー例外{
20 のSystem.out.println( "HELLO!......" );
21 リターン 1024 ;
22 }
23 }
Threadクラス呼び出し可能インターフェースに直接なしコンストラクタは、パッケージfutureTask呼び出し可能インターフェース・クラスのコンストラクタを備え、実装、Runnableインタフェースを使用する必要があります。
引入Callable接口具有哪些好处:
(1),可以获得任务执行返回值;
(2),通过与FutureTest的结合,可以实现利用FutureTest来跟踪异步计算的结果。并且多个线程执行同一个类的call方法,只会被执行一次,因为返回值已经保存记住了。