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
*/實現(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
因為FutureTask可以接口一個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)文章
Java編程實現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法
這篇文章主要介紹了Java編程實現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法,涉及Java字符串操作及拼音轉(zhuǎn)換的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11
Springmvc自定義參數(shù)轉(zhuǎn)換實現(xiàn)代碼解析
這篇文章主要介紹了Springmvc自定義參數(shù)轉(zhuǎn)換實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07
詳解SpringMVC學(xué)習(xí)系列(6) 之 數(shù)據(jù)驗證
這篇文章主要介紹了詳解SpringMVC學(xué)習(xí)系列(6) 之 數(shù)據(jù)驗證 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-12-12
Spring?Boot源碼實現(xiàn)StopWatch優(yōu)雅統(tǒng)計耗時
這篇文章主要為大家介紹了Spring?Boot源碼實現(xiàn)StopWatch優(yōu)雅統(tǒng)計耗時,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
ReentrantLock從源碼解析Java多線程同步學(xué)習(xí)
這篇文章主要為大家介紹了ReentrantLock從源碼解析Java多線程同步學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Java數(shù)據(jù)結(jié)構(gòu)之線性表
線性表是其組成元素間具有線性關(guān)系的一種數(shù)據(jù)結(jié)構(gòu),對線性表的基本操作主要有,獲取元素,設(shè)置元素值,遍歷,插入,刪除,查找,替換,排序等。而線性表可以采用順序儲存結(jié)構(gòu)和鏈?zhǔn)絻Υ娼Y(jié)構(gòu),本節(jié)主要講解順序表、單鏈表以及雙鏈表的各種基本操作。2017-03-03
Java8?Stream?collect(Collectors.toMap())的使用
這篇文章主要介紹了Java8?Stream?collect(Collectors.toMap())的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05

