Javaのスレッドがよく言及されますが、実際の開発作業はめったに使用されないテクノロジーです(少なくとも私は使用しません)。以下に、いくつかの一般的なスレッド実装方法を紹介します
1. Threadクラスを継承し、runメソッドを書き換えます
Threadクラスを統合し、runメソッドを書き換えてスレッドを実装し、startメソッドでスレッドを開始します
パブリック クラス MyThread はThread {を拡張します。 @オーバーライド public void run(){ System.out.println( "================" + new Date()); } public static void main(String [] args){ for(int i = 0; i <10; i ++ ){ MyThread myThread = new MyThread(); myThread.start(); } } }
mainメソッドを実行して効果をテストします。
2. Runableインターフェースを実装する
Javaのスレッドクラスとしてのスレッド。これには、構築パラメーターとしてRunableコンストラクターがあり、Runableインターフェイスを実装することにより、スレッドをさらに実装できます。同じことは、スレッドをstartから開始することです。
/ ** * Runableインターフェースを実装することにより * / パブリック クラス MyRunableImpl はRunnableを実装します{ プライベート文字列名。 public MyRunableImpl(String name){ this .name = name; } @オーバーライド public void run(){ System.out.println(name + "================" + new Date()); } public static void main(String [] args){ for(int i = 0; i <10; i ++ ){ MyRunableImpl myRunable = new MyRunableImpl( "myRunable" + i); スレッドt = 新しいスレッド(myRunable); t.start(); } } }
mainメソッドを実行して効果をテストします。
3. FutureTaskのスレッド
このメソッドは、2番目のメソッドに似ているか、スレッド(Runnable)構築メソッドが使用されます。違いは、Runableを自分で実装する代わりに、FutureTaskを使用することです。実装されたFutureTask
RunnableFutureインターフェースとRunnableFutureインターフェースはRunableインターフェースを統合しているため、FutureTaskを構築パラメーターとして使用してスレッドを作成することもできます。FutureTaskは2つのパラメーター化された構築メソッドをサポートします。ここでは、Future(Callable)を使用します。まず、Callableインターフェースとcallメソッドを実装する必要があるクラスを作成する必要があります。
パブリック クラス MyCallable はCallable { プライベート文字列名。 public MyCallable(String name){ this .name = name; } @オーバーライド public Object call()が例外をスローします{ System.out.println(name + "===============" + new Date()); 名前を返す; } }
テストクラス
パブリック クラスFutureTaskTest { public static void main(String [] args)はExecutionException、InterruptedException { for(int i = 0; i <10; i ++ ){をスローします MyCallable myCallable = new MyCallable( "myCallable" + i); FutureTask futureTask = new FutureTask(myCallable); スレッドt = 新しいThread(futureTask); t.start(); オブジェクトo = futureTask.get(); System.out.println( "戻り値=============" + o); } } }
mainメソッドを実行して効果をテストします。
Callableインターフェースのcallメソッドは、スレッドの開始時に呼び出されます。FutureTask.get()メソッドを使用して、call()の戻り値を取得できます。getメソッドはスレッドをブロックすることに注意してください。
4.エグゼキューターを使用してスレッドプールを作成する
Executorsはjava jucのクラスです。これを使用してスレッドプールを作成し、これを使用してスレッドを実装できます。このメソッドにはCallable実装クラスも必要です。ここでも3番目のメソッドでクラスを使用しています。
パブリック クラスExecutorsTest { public static void main(String [] args){ ExecutorService executorService = Executors.newFixedThreadPool(10 ); リスト <Future <?>> list = new ArrayList <> (); for(int i = 0; i <10; i ++ ){ MyCallable myCallable = new MyCallable( "myCallable" + i); 将来の送信 = executorService.submit(myCallable); list.add(submit); } 以下のために(今後の未来:リスト){ しようと{ オブジェクトo = future.get(); System.out.println( "戻り値==============" + o); } キャッチ(InterruptedException e){ e.printStackTrace(); } キャッチ(ExecutionException e){ e.printStackTrace(); } } executorService.shutdown(); } }
Executorsを使用してスレッドプールを作成し、ExecutorService.submit(Callable)がスレッドを開始します。submitメソッドはFutureオブジェクトを返し、Callable実装クラスのcallメソッドの戻り値は、そのget()メソッドを通じて取得できます。上記の操作を実行した後、ExecutorService.shutdownメソッドを呼び出す必要があります。そうしないと、メインスレッドが常に実行されます。
mainメソッドを実行して効果をテストします。
上記は、複数のスレッドを作成する一般的な方法です。正しくない場合は、コメントを残してください。