真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Callable接口和Runnable接口

Java代碼??

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括萍鄉(xiāng)網(wǎng)站建設(shè)、萍鄉(xiāng)網(wǎng)站制作、萍鄉(xiāng)網(wǎng)頁制作以及萍鄉(xiāng)網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,萍鄉(xiāng)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到萍鄉(xiāng)省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

public interface Executor {??

??

? ? /**?

? ? ?* Executes the given command at some time in the future.? The command?

? ? ?* may execute in a new thread, in a pooled thread, or in the calling?

? ? ?* thread, at the discretion of the Executor implementation.?

? ? ?*?

? ? ?* @param command the runnable task?

? ? ?* @throws RejectedExecutionException if this task cannot be?

? ? ?* accepted for execution.?

? ? ?* @throws NullPointerException if command is null?

? ? ?*/??

? ? void execute(Runnable command);??

}??

?

Java代碼??

//接口ExecutorService繼承自Executor,它的目的是為我們管理Thread對(duì)象,從而簡(jiǎn)化并發(fā)編程??

public interface ExecutorService extends Executor {??

??

? ? Future submit(Callable task);??

? ? ?

? ? Future submit(Runnable task, T result);??

??

? ? Future submit(Runnable task);??

? ? ??

? ? ...? ? ?

}??

?

Java代碼??

public interface Callable {??

? ? /**?

? ? ?* Computes a result, or throws an exception if unable to do so.?

? ? ?*?

? ? ?* @return computed result?

? ? ?* @throws Exception if unable to compute a result?

? ? ?*/??

? ? V call() throws Exception;??

}??

??

??

public interface Runnable {??

? ? ?

? ? public abstract void run();??

}??

?

Java代碼??

public interface Future {??

? ? ??

? ? boolean cancel(boolean mayInterruptIfRunning);? ? ??

??

? ? /**?

? ? ?* Waits if necessary for the computation to complete, and then?

? ? ?* retrieves its result.?

? ? ?*?

? ? ?* @return the computed result? ?

? ? ?*/??

? ? V get() throws InterruptedException, ExecutionException;??

??

? ? ?

? ? V get(long timeout, TimeUnit unit)??

? ? ? ? throws InterruptedException, ExecutionException, TimeoutException;??

}??

?

Callable接口和Runnable接口相似,區(qū)別就是Callable需要實(shí)現(xiàn)call方法,而Runnable需要實(shí)現(xiàn)run方法;并且,call方法還可以返回任何對(duì)象,無論是什么對(duì)象,JVM都會(huì)當(dāng)作Object來處理。但是如果使用了泛型,我們就不用每次都對(duì)Object進(jìn)行轉(zhuǎn)換了。

?

Runnable和Callable都是接口

不同之處:

1.Callable可以返回一個(gè)類型V,而Runnable不可以

2.Callable能夠拋出checked exception,而Runnable不可以。

3.Runnable是自從java1.1就有了,而Callable是1.5之后才加上去的

4.Callable和Runnable都可以應(yīng)用于executors。而Thread類只支持Runnable.

上面只是簡(jiǎn)單的不同,其實(shí)這兩個(gè)接口在用起來差別還是很大的。Callable與executors聯(lián)合在一起,在任務(wù)完成時(shí)可立刻獲得一個(gè)更新了的Future。而Runable卻要自己處理

?

? Future接口,一般都是取回Callable執(zhí)行的狀態(tài)用的。其中的主要方法:

cancel,取消Callable的執(zhí)行,當(dāng)Callable還沒有完成時(shí)

get,獲得Callable的返回值

isCanceled,判斷是否取消了

isDone,判斷是否完成

?

用Executor來構(gòu)建線程池,應(yīng)該要做的事:

1).調(diào)用Executors類中的靜態(tài)方法newCachedThreadPool(必要時(shí)創(chuàng)建新線程,空閑線程會(huì)被保留60秒)或newFixedThreadPool(包含固定數(shù)量的線程池)等,返回的是一個(gè)實(shí)現(xiàn)了ExecutorService接口的ThreadPoolExecutor類或者是一個(gè)實(shí)現(xiàn)了ScheduledExecutorServiece接口的類對(duì)象。

2).調(diào)用submit提交Runnable或Callable對(duì)象。

3).如果想要取消一個(gè)任務(wù),或如果提交Callable對(duì)象,那就要保存好返回的Future對(duì)象。

4).當(dāng)不再提交任何任務(wù)時(shí),調(diào)用shutdown方法。

?

舉2個(gè)例子如下:

Java代碼? ?

package thread.test04;??

import java.util.concurrent.*;??

public class ThreadTestA {??

? ? public static void main(String[] args) {??

? ? ? ? ExecutorService e=Executors.newFixedThreadPool(10);??

? ? ? ? e.execute(new MyRunnableA());??

? ? ? ? e.execute(new MyRunnableB());??

? ? ? ?e.shutdown();??

? ?}??

??

}??

??

class MyRunnableA implements Runnable{??

? ? ??

? ? public void run(){??

? ? ? ? System.out.println("Runnable:run()....");??

? ? ? ? int i=0;??

? ? ? ? while(i<20){??

? ? ? ? ? ? i++;??

? ? ? ? ? ? for(int j=0;j<1000000;j++);??

? ? ? ? ? ? System.out.println("i="+i);??

? ? ? ? }??

? ? }??

}??

??

class MyRunnableB implements Runnable{??

? ? public void run(){??

? ? ? ? char c='A'-1;??

? ? ? ? while(c<'Z'){??

? ? ? ? ? ? c++;??

? ? ? ? ? ? for(int j=0;j<1000000;j++);??

? ? ? ? ? ? System.out.println("c="+c);??

? ? ? ? }??

? ? }??

}??

?

Java代碼? ?

package thread.test04;??

??

import java.util.concurrent.Callable;??

import java.util.concurrent.ExecutionException;??

import java.util.concurrent.ExecutorService;??

import java.util.concurrent.Executors;??

import java.util.concurrent.Future;??

??

public class ThreadTestB {??

? ? public static void main(String[] args) {??

? ? ? ? ExecutorService e=Executors.newFixedThreadPool(10);??

? ? ? ? Future f1=e.submit(new MyCallableA());??

? ? ? ? Future f2=e.submit(new MyCallableA());??

? ? ? ? Future f3=e.submit(new MyCallableA());? ? ? ??

? ? ? ? System.out.println("--Future.get()....");??

? ? ? ? try {??

? ? ? ? ? ? System.out.println(f1.get());??

? ? ? ? ? ? System.out.println(f2.get());??

? ? ? ? ? ? System.out.println(f3.get());? ? ? ? ? ??

? ? ? ? } catch (InterruptedException e1) {??

? ? ? ? ? ? e1.printStackTrace();??

? ? ? ? } catch (ExecutionException e1) {??

? ? ? ? ? ? e1.printStackTrace();??

? ? ? ? }??

? ? ? ? ??

? ? ? ? e.shutdown();??

? ? ? ? ??

? ? }??

??

}??

??

class MyCallableA implements Callable{??

? ? public String call() throws Exception {??

? ? ? ? System.out.println("開始執(zhí)行Callable");??

? ? ? ? String[] ss={"zhangsan","lisi"};??

? ? ? ? long[] num=new long[2];??

? ? ? ? for(int i=0;i<1000000;i++){??

? ? ? ? ? ? num[(int)(Math.random()*2)]++;??

? ? ? ? }??

? ? ? ? ??

? ? ? ? if(num[0]>num[1]){??

? ? ? ? ? ? return ss[0];??

? ? ? ? }else if(num[0]

? ? ? ? ? ? throw new Exception("棄權(quán)!");??

? ? ? ? }else{??

? ? ? ? ? ? return ss[1];??

? ? ? ? }??

? ? }??

? ? ??

}??


分享題目:Callable接口和Runnable接口
瀏覽路徑:http://weahome.cn/article/gigpsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部