国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

java 線程三種實現(xiàn)方式

原創(chuàng) 2016-11-04 14:08:54 517
摘要:1繼承thread<code class="hljs java"><span class="hljs-keyword">public <span class="hljs-class"><span class="hljs-keyw

1繼承thread

<code class="hljs java"><span class="hljs-keyword">public <span class="hljs-class"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword">class<span class="hljs-class"> <span class="hljs-title"><span class="hljs-class"><span class="hljs-title">MultiThread1<span class="hljs-class"> <span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword">extends<span class="hljs-class"> <span class="hljs-title"><span class="hljs-class"><span class="hljs-title">Thread{
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">run<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(){
<span class="hljs-keyword">for(<span class="hljs-keyword">int i=<span class="hljs-number">0; i<<span class="hljs-number">7; i++){
System.out.println(<span class="hljs-string">"name:"+<span class="hljs-keyword">this.getName()+<span class="hljs-string">" i:"+ i+<span class="hljs-string">"   ");
}
}
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">static<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">main<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(String[] args)<span class="hljs-function"> {
MultiThread1 tA = <span class="hljs-keyword">new MultiThread1();
tA.setName(<span class="hljs-string">"AA");
MultiThread1 tB = <span class="hljs-keyword">new MultiThread1();
tB.setName(<span class="hljs-string">"BB");
tA.start();
tB.start();
}
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

2實現(xiàn)Runnable

<code class="hljs java"><span class="hljs-keyword">public <span class="hljs-class"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword">class<span class="hljs-class"> <span class="hljs-title"><span class="hljs-class"><span class="hljs-title">MyRunnable<span class="hljs-class"> <span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword">implements<span class="hljs-class"> <span class="hljs-title"><span class="hljs-class"><span class="hljs-title">Runnable{
<span class="hljs-keyword">private String name;
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> String <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">getName<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()<span class="hljs-function"> {
<span class="hljs-keyword">return name;
}
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">setName<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(String name)<span class="hljs-function"> {
<span class="hljs-keyword">this.name = name;
}
<span class="hljs-meta">@Override
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">run<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()<span class="hljs-function"> {
<span class="hljs-comment">// TODO Auto-generated method stub
<span class="hljs-keyword">for(<span class="hljs-keyword">int i=<span class="hljs-number">0; i<<span class="hljs-number">10; i++){
System.out.println(<span class="hljs-string">"name:"+<span class="hljs-keyword">this.getName()+<span class="hljs-string">" i:"+ i+<span class="hljs-string">"   ");
}
}
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">public<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">static<span class="hljs-function"> <span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void<span class="hljs-function"> <span class="hljs-title"><span class="hljs-function"><span class="hljs-title">main<span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(String[] args)<span class="hljs-function"> {
MyRunnable mA = <span class="hljs-keyword">new MyRunnable();
mA.setName(<span class="hljs-string">"AA");
MyRunnable mB = <span class="hljs-keyword">new MyRunnable();
mB.setName(<span class="hljs-string">"BB");
Thread t1 = <span class="hljs-keyword">new Thread(mA);
Thread t2 = <span class="hljs-keyword">new Thread(mB);
t1.start();
t2.start();
}
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

3 使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的多線程
ExecutorService、Callable、Future這個對象實際上都是屬于Executor框架中的功能類。想要詳細(xì)了解Executor框架的可以訪問http://www.javaeye.com/topic/366591 ,這里面對該框架做了很詳細(xì)的解釋。返回結(jié)果的線程是在JDK1.5中引入的新特征,確實很實用,有了這種特征我就不需要再為了得到返回值而大費周折了,而且即便實現(xiàn)了也可能漏洞百出。
可返回值的任務(wù)必須實現(xiàn)Callable接口,類似的,無返回值的任務(wù)必須Runnable接口。執(zhí)行Callable任務(wù)后,可以獲取一個Future的對象,在該對象上調(diào)用get就可以獲取到Callable任務(wù)返回的Object了,再結(jié)合線程池接口ExecutorService就可以實現(xiàn)傳說中有返回結(jié)果的多線程了。下面提供了一個完整的有返回結(jié)果的多線程測試?yán)?,在JDK1.5下驗證過沒問題可以直接使用。

<code class="hljs typescript"><span class="hljs-keyword">import java.util.concurrent.*;
<span class="hljs-keyword">import java.util.Date;
<span class="hljs-keyword">import java.util.List;
<span class="hljs-keyword">import java.util.ArrayList;
<span class="hljs-comment">/**
* 有返回值的線程
*/
@SuppressWarnings(<span class="hljs-string">"unchecked")
<span class="hljs-keyword">public <span class="hljs-keyword">class Test {
<span class="hljs-keyword">public <span class="hljs-keyword">static <span class="hljs-built_in">void main(<span class="hljs-built_in">String[] args) throws ExecutionException,
    InterruptedException {
   System.out.println(<span class="hljs-string">"----程序開始運行----");
   <span class="hljs-built_in">Date date1 = <span class="hljs-keyword">new <span class="hljs-built_in">Date();
   int taskSize = <span class="hljs-number">5;
   <span class="hljs-comment">// 創(chuàng)建一個線程池
   ExecutorService pool = Executors.newFixedThreadPool(taskSize);
   <span class="hljs-comment">// 創(chuàng)建多個有返回值的任務(wù)
   List<Future> list = <span class="hljs-keyword">new ArrayList<Future>();
   <span class="hljs-keyword">for (int i = <span class="hljs-number">0; i < taskSize; i++) {
    Callable c = <span class="hljs-keyword">new MyCallable(i + <span class="hljs-string">" ");
    <span class="hljs-comment">// 執(zhí)行任務(wù)并獲取Future對象
    Future f = pool.submit(c);
    <span class="hljs-comment">// System.out.println(">>>" + f.get().toString());
    list.add(f);
   }
   <span class="hljs-comment">// 關(guān)閉線程池
   pool.shutdown();
   <span class="hljs-comment">// 獲取所有并發(fā)任務(wù)的運行結(jié)果
   <span class="hljs-keyword">for (Future f : list) {
    <span class="hljs-comment">// 從Future對象上獲取任務(wù)的返回值,并輸出到控制臺
    System.out.println(<span class="hljs-string">">>>" + f.get().toString());
   }
   <span class="hljs-built_in">Date date2 = <span class="hljs-keyword">new <span class="hljs-built_in">Date();
   System.out.println(<span class="hljs-string">"----程序結(jié)束運行----,程序運行時間【"
     + (date2.getTime() - date1.getTime()) + <span class="hljs-string">"毫秒】");
}
}
<span class="hljs-keyword">class MyCallable <span class="hljs-keyword">implements Callable<<span class="hljs-built_in">Object> {
<span class="hljs-keyword">private <span class="hljs-built_in">String taskNum;
MyCallable(<span class="hljs-built_in">String taskNum) {
   <span class="hljs-keyword">this.taskNum = taskNum;
}
<span class="hljs-keyword">public <span class="hljs-built_in">Object call() throws Exception {
   System.out.println(<span class="hljs-string">">>>" + taskNum + <span class="hljs-string">"任務(wù)啟動");
   <span class="hljs-built_in">Date dateTmp1 = <span class="hljs-keyword">new <span class="hljs-built_in">Date();
   Thread.sleep(<span class="hljs-number">1000);
   <span class="hljs-built_in">Date dateTmp2 = <span class="hljs-keyword">new <span class="hljs-built_in">Date();
   long time = dateTmp2.getTime() - dateTmp1.getTime();
   System.out.println(<span class="hljs-string">">>>" + taskNum + <span class="hljs-string">"任務(wù)終止");
   <span class="hljs-keyword">return taskNum + <span class="hljs-string">"任務(wù)返回運行結(jié)果,當(dāng)前任務(wù)時間【" + time + <span class="hljs-string">"毫秒】";
}
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>


發(fā)布手記

熱門詞條