@Slf4j(topic = "c.Test1") public class Test1 { public static void main(String[] args) { //创建线程对象 Thread t = new Thread(){ @Override public void run() { //要执行的任务 log.debug("running"); } }; //设置线程的名字 t.setName("t1"); //启动线程 t.start(); log.debug("running"); } } /* 19:44:31.998 [main] DEBUG c.Test1 - running 19:44:31.998 [t1] DEBUG c.Test1 - running */
スレッドとタスクを分離します
Thread はスレッドを表します
Runnable は実行可能なタスクを表します
@Slf4j(topic = "c.Test2") public class Test2 { public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { //要执行的任务 log.debug("running"); } }; //创建线程对象 Thread t = new Thread(runnable, "t2"); //启动线程 t.start(); } } //19:52:27.646 [t2] DEBUG c.Test2 - running
javajava には @ がありますFunctionalInterface@FunctionalInterface アノテーションは、インターフェイスに抽象メソッドが 1 つだけあることを意味します。これはラムダラムダ式で簡素化できます。
@Slf4j(topic = "c.Test2") public class Test2 { public static void main(String[] args) { Runnable runnable = () -> { //要执行的任务 log.debug("running"); }; //创建线程对象 Thread t = new Thread(runnable, "t2"); //启动线程 t.start(); } }
FutureTask は Callable 型パラメーターとインターフェイスできるため、使用される状況の処理戻り値付き
@Slf4j(topic = "c.Test3") public class Test3 { public static void main(String[] args) throws ExecutionException, InterruptedException { //创建任务对象 FutureTask<Integer> task = new FutureTask<>(() -> { log.debug("running"); Thread.sleep(1000); return 100; }); /* 用lambda化简前 */ FutureTask<Integer> task1 = new FutureTask<>(new Callable<Integer>() { @Override public Integer call() throws Exception { log.debug("running"); Thread.sleep(1000); return 100; } }); //参数1是任务的对象, 参数2是线程的名字 Thread t = new Thread(task, "t3"); t.run(); //主线程堵塞,同步等待task执行完毕的结果 Integer integer = task.get(); log.debug("结果是:{}", integer); } }
以上がJava がスレッドを作成する方法の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。