Java中Runnable與Callable接口的區(qū)別詳解
預(yù)備知識(shí)
Java中的線程對(duì)象是Thread,新建線程也只有通過(guò)創(chuàng)建Thread對(duì)象的實(shí)例來(lái)創(chuàng)建。
先說(shuō)結(jié)論
1 Runnable沒(méi)有返回值的FunctionalInterface(jdk 1.8概念)接口,相反Callable是有返回值的FunctionalInterface接口
2 Runnable + Thread 創(chuàng)建一個(gè)無(wú)返回結(jié)果的任務(wù)線程
3 Runnable + Callable +Thread 創(chuàng)建一個(gè)有返回結(jié)果的任務(wù)線程
一:Runnable 示例
? 創(chuàng)建一個(gè)無(wú)返回結(jié)果的任務(wù)線程,so eazy !!!!
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "我是一個(gè)無(wú)返回結(jié)果的任務(wù)線程");
}
},"線程一:").start(); //start()開(kāi)啟任務(wù)
}
二:Callable示例
2.1 JAVA異步編程之Callbacks與Futures模型
我是用Executors線程池的方式來(lái)創(chuàng)建的。
2.2 用最原始的方法
public class PrimitiveCallable implements Callable, Runnable {
public static void main(String[] args) {
//實(shí)現(xiàn)
new Thread(new PrimitiveCallable(), "線程二:").start();
}
@Override
public void run() {//Runnable實(shí)現(xiàn)
try {
Object call = this.call();
System.out.println(call);
} catch (Exception exception) {
exception.printStackTrace();
}
}
@Override
public Object call() throws Exception { //Callable 實(shí)現(xiàn)
return "異步任務(wù)返回的結(jié)果!!!";
}
}
2.3 FutureTask 一種jdk的實(shí)現(xiàn)方式
public class FutureTask<V> implements RunnableFuture<V> { //RunnableFuture 實(shí)現(xiàn)了以上2個(gè)接口
........省略.........
public void run() { //重寫run實(shí)現(xiàn)
if (state != NEW ||
!UNSAFE.compareAndSwapObject(this, runnerOffset,
null, Thread.currentThread()))
return;
try {
Callable<V> c = callable; //構(gòu)建對(duì)象是傳入的參數(shù)
if (c != null && state == NEW) {
V result;
boolean ran;
try {
result = c.call(); //調(diào)用任務(wù)并返回結(jié)果
ran = true;
} catch (Throwable ex) {
result = null;
ran = false;
setException(ex); //設(shè)置異常時(shí)的結(jié)果
}
if (ran)
set(result); //設(shè)置結(jié)果
}
} finally {
runner = null;
int s = state;
if (s >= INTERRUPTING)
handlePossibleCancellationInterrupt(s);
}
}
........省略.........
}
小結(jié)
1 不要糾結(jié)有幾種創(chuàng)建線程的方法了,就一種即通過(guò)Thread,但Thread有9個(gè)構(gòu)造函數(shù)方法
2 9個(gè)構(gòu)造函數(shù)方法
public Thread()
public Thread(Runnable target)
Thread(Runnable target, AccessControlContext acc)
public Thread(ThreadGroup group, Runnable target)
public Thread(String name)
public Thread(ThreadGroup group, String name)
public Thread(Runnable target, String name)
public Thread(ThreadGroup group, Runnable target, String name)
public Thread(ThreadGroup group, Runnable target, String name,
long stackSize)到此這篇關(guān)于Java中Runnable與Callable接口的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Java Runnable Callable接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java使用多線程批次查詢大量數(shù)據(jù)(Callable返回?cái)?shù)據(jù))方式
- Java通過(guò)Callable實(shí)現(xiàn)多線程
- Java多線程中Callable和Future的解讀
- Java中的Callable實(shí)現(xiàn)多線程詳解
- Java使用Callable接口實(shí)現(xiàn)多線程的實(shí)例代碼
- Java多線程實(shí)現(xiàn)之Callable詳解
- Java中Runnable和Callable分別什么時(shí)候使用
- 詳解Java中Callable和Future的區(qū)別
- Java使用Runnable和Callable實(shí)現(xiàn)多線程的區(qū)別詳解
- java面試常問(wèn)的Runnable和Callable的區(qū)別
- Java并發(fā)教程之Callable和Future接口詳解
- Java中callable的實(shí)現(xiàn)原理
相關(guān)文章
Java實(shí)戰(zhàn)在線選課系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)在線選課系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11
Spring注解中@Autowired和@Bean的區(qū)別詳解
這篇文章主要詳細(xì)介紹了Spring注解中@Autowired和@Bean二者有什么區(qū)別,文中通過(guò)兩個(gè)注解的使用場(chǎng)景介紹了二者的區(qū)別,感興趣的同學(xué)可以參考閱讀2023-06-06
springboot配置resilience4j全過(guò)程
這篇文章主要介紹了springboot配置resilience4j全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
關(guān)于Lambda表達(dá)式的方法引用和構(gòu)造器引用簡(jiǎn)的單示例
這篇文章主要介紹了關(guān)于Lambda表達(dá)式的方法引用和構(gòu)造器引用簡(jiǎn)的單示例,方法引用與構(gòu)造器引用可以使?Lambda?表達(dá)式的代碼塊更加簡(jiǎn)潔<BR>,需要的朋友可以參考下2023-04-04
Java AbstractMethodError原因案例詳解
這篇文章主要介紹了Java AbstractMethodError原因案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

