1. Thread クラスを継承します
public class ThreadCreator extends Thread{ public static void main(String[] args) { //第一种方式: ThreadCreator creator = new ThreadCreator(); Thread thread = new Thread(creator,"线程1"); thread.start(); //第二种方式: Thread thread = new ThreadCreator(); thread.start(); //第三种方式: new ThreadCreator().start(); } @Override public void run() { System.out.println(Thread.currentThread().getName() + "run"); } }
2. Runnable インターフェイスを実装します
(無料の学習ビデオ チュートリアルの共有: java ビデオ チュートリアル)
public class ThreadCreator implements Runnable{ public static void main(String[] args) { ThreadCreator creator = new ThreadCreator(); Thread thread = new Thread(creator,"线程1"); thread.start(); } @Override public void run() { System.out.println(Thread.currentThread().getName() + "run"); } }
3. Callable インターフェイスの実装
public class ThreadCreator implements Callable<Integer> { public static void main(String[] args) throws ExecutionException, InterruptedException { ThreadCreator creator = new ThreadCreator(); FutureTask futureTask = new FutureTask(creator); Thread thread = new Thread(futureTask,"线程"); thread.start(); System.out.println(futureTask.get()); } @Override public Integer call() { return 1024; } }
4. スレッド プール ExecutorService
public class ThreadCreator{ static ExecutorService service = Executors.newFixedThreadPool(5); public static void main(String[] args) throws ExecutionException, InterruptedException { //execute无返回值 service.execute(new ThreadTask(1,"1")); //submit有返回值 Future<Integer> result = service.submit(new ThreadTaskCall()); System.out.println(result.get()); service.shutdownNow(); } static class ThreadTask implements Runnable{ private int param1; private String param2; public ThreadTask(int param3,String param4){ this.param1 = param3; this.param2 = param4; } @Override public void run() { System.out.println(param1+param2); } } static class ThreadTaskCall implements Callable<Integer>{ @Override public Integer call() throws Exception { return 1024; } } }
スレッド プールでの送信と実行の違い:
(1 ) 受け入れられるタスクの種類は異なります。実行は実行可能なタスクのみを受け入れることができ、送信は呼び出し可能なタスクも受け入れることができます。
(2) 戻り値:execute には戻り値がありません、一度タスクを投入するとカレントスレッドでは実行結果を監視できません。 Submit には Future 型の戻り値があり、戻り値を受け取ったり、例外に応答したりするために使用されます。 get() メソッドを通じて取得されます。
submit の最下層は依然として実行と呼ばれますが、これに基づいて将来の層でカプセル化され、実行中に生成されたすべての例外は変数にカプセル化されます:
public void run() { if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread())) return; try { Callable<V> c = callable; if (c != null && state == NEW) { V result; boolean ran; try { result = c.call(); ran = true; } catch (Throwable ex) { result = null; ran = false; setException(ex); } if (ran) set(result); } } finally { runner = null; int s = state; if (s >= INTERRUPTING) handlePossibleCancellationInterrupt(s); } } protected void setException(Throwable t) { if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) { outcome = t; UNSAFE.putOrderedInt(this, stateOffset, EXCEPTIONAL); // final state finishCompletion(); } }
さらに, spring スケジュールアノテーションは、参照のために submit 処理メソッドを使用します。
5. 匿名内部クラス
public class ThreadCreator { public static void main(String[] args) { //继承Thread类 new Thread() { @Override public void run() { System.out.println("extends Thread Class!"); } }.start(); //实现Runnable接口 new Thread(new Runnable() { @Override public void run() { System.out.println("implement Runnable!"); } }).start(); //实现Callable接口 new Thread(new FutureTask<Integer>(new Callable() { @Override public Integer call() throws Exception { return 1024; } })).start(); //lambda表达式 new Thread(() -> System.out.println("execute single code")).start(); new Thread(() -> { System.out.println("execute multiple code"); }).start(); } }
ラムダ スレッド プール:
public class ThreadCreator { static ExecutorService service = Executors.newFixedThreadPool(5); static List list = new ArrayList(); public static void main(String[] args) { service.execute(() -> execute()); //无返回值 Future future = service.submit(() -> execute()); //有返回值 list.add(future); } public static void execute() { //do something } }
推奨関連記事チュートリアル: java クイック スタート
以上がJavaでスレッドを作成する方法のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。