Java創(chuàng)建線程的方式解析
繼承Thread,這里使用匿名內(nèi)部類
@Slf4j(topic = "c.Test1") public class Test1 { public static void main(String[] args) { //創(chuàng)建線程對象 Thread t = new Thread(){ @Override public void run() { //要執(zhí)行的任務(wù) log.debug("running"); } }; //設(shè)置線程的名字 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 */
實(shí)現(xiàn)Runnable接口,配合Thread類,同樣用匿名內(nèi)部類
- 把線程和任務(wù)分開
- Thread表示線程
- Runnable代表可運(yùn)行的任務(wù)
@Slf4j(topic = "c.Test2") public class Test2 { public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { //要執(zhí)行的任務(wù) log.debug("running"); } }; //創(chuàng)建線程對象 Thread t = new Thread(runnable, "t2"); //啟動線程 t.start(); } } //19:52:27.646 [t2] DEBUG c.Test2 - running
在javajava中,有@FunctionalInterface@FunctionalInterface注解意味著該接口只有一個抽象方法,即可以用lambdalambda表達(dá)式的方式簡化
@Slf4j(topic = "c.Test2") public class Test2 { public static void main(String[] args) { Runnable runnable = () -> { //要執(zhí)行的任務(wù) log.debug("running"); }; //創(chuàng)建線程對象 Thread t = new Thread(runnable, "t2"); //啟動線程 t.start(); } }
FutureTask配合Thread
因?yàn)镕utureTask可以接口一個Callable類型的參數(shù),用來處理有返回值的情況
@Slf4j(topic = "c.Test3") public class Test3 { public static void main(String[] args) throws ExecutionException, InterruptedException { //創(chuàng)建任務(wù)對象 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; } }); //參數(shù)1是任務(wù)的對象, 參數(shù)2是線程的名字 Thread t = new Thread(task, "t3"); t.run(); //主線程堵塞,同步等待task執(zhí)行完畢的結(jié)果 Integer integer = task.get(); log.debug("結(jié)果是:{}", integer); } }
到此這篇關(guān)于Java創(chuàng)建線程的方式解析的文章就介紹到這了,更多相關(guān)Java創(chuàng)建線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Cloud?+?Nacos?+?Seata整合過程(分布式事務(wù)解決方案)
Seata 是一款開源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了Spring?Cloud?+?Nacos?+?Seata整合過程(分布式事務(wù)解決方案),需要的朋友可以參考下2022-03-03java實(shí)現(xiàn)切割wav音頻文件的方法詳解【附外部jar包下載】
這篇文章主要介紹了java實(shí)現(xiàn)切割wav音頻文件的方法,結(jié)合實(shí)例形式詳細(xì)分析了java切割wav音頻文件的相關(guān)原理、操作技巧與注意事項(xiàng),并附帶外部jar包供讀者下載,需要的朋友可以參考下2019-05-05Java線程狀態(tài)及切換、關(guān)閉線程的正確姿勢分享
這篇文章主要給大家介紹了關(guān)于Java線程狀態(tài)及切換、關(guān)閉線程的正確姿勢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Java Socket通信(一)之客戶端程序 發(fā)送和接收數(shù)據(jù)
對于Socket通信簡述,服務(wù)端往Socket的輸出流里面寫東西,客戶端就可以通過Socket的輸入流讀取對應(yīng)的內(nèi)容,Socket與Socket之間是雙向連通的,所以客戶端也可以往對應(yīng)的Socket輸出流里面寫東西,然后服務(wù)端對應(yīng)的Socket的輸入流就可以讀出對應(yīng)的內(nèi)容2016-03-03spring boot jpa寫原生sql報(bào)Cannot resolve table錯誤解決方法
在本篇文章里小編給大家整理的是關(guān)于spring boot jpa寫原生sql報(bào)Cannot resolve table錯誤的解決方法,需要的朋友學(xué)習(xí)下。2019-11-11