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