一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 詳解Java實(shí)現(xiàn)多線程的三種方式

詳解Java實(shí)現(xiàn)多線程的三種方式

2020-04-13 11:33趙杰A-124 JAVA教程

這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多線程的三種方式,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java實(shí)現(xiàn)多線程的三種方式,供大家參考,具體內(nèi)容如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
 
public class Main {
 
  public static void main(String[] args) {
    //方法一:繼承Thread
    int i = 0;
//    for(; i < 100; i++){
//      System.out.println(Thread.currentThread().getName() + " " + i);
//      if (i == 5) {
//        ThreadExtendsThread threadExtendsThread = new ThreadExtendsThread();
//        threadExtendsThread.start();
//      }
//    }
     
    //方法二:實(shí)現(xiàn)Runnable
//    for(i = 0; i < 100; i++){
//      System.out.println(Thread.currentThread().getName() + " " + i);
//      if (i == 5) {
//        Runnable runnable = new ThreadImplementsRunnable();
//        new Thread(runnable).start();
//        new Thread(runnable).start();
//      }
//    }
 
    //方法三:實(shí)現(xiàn)Callable接口
    Callable<Integer> callable = new ThreadImplementsCallable();
    FutureTask<Integer> futureTask = new FutureTask<>(callable);
    for(i = 0; i < 100; i++){
      System.out.println(Thread.currentThread().getName() + " " + i);
      if (i == 5) {
        new Thread(futureTask).start();
        new Thread(futureTask).start();
      }
    }
    try {
      System.out.println("futureTask ruturn: " + futureTask.get());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
}

方法一,繼承自Thread

?
1
2
3
4
5
6
7
8
9
public class ThreadExtendsThread extends Thread {
  private int i;
  @Override
  public void run() {
    for(; i < 100; i++) {
      System.out.println(getName() + " " + i);
    }
  }
}

run方法為線程執(zhí)行體,ThreadExtendsThread對象即為線程對象。

方法二,實(shí)現(xiàn)Runnable接口

?
1
2
3
4
5
6
7
8
9
public class ThreadImplementsRunnable implements Runnable {
  private int i;
  @Override
  public void run() {
    for(; i < 100; i++){
      System.out.println(Thread.currentThread().getName() + " " + i);
    }
  }
}

run方法為線程執(zhí)行體,使用時(shí)New一個(gè)Thread對象,Runnable對象作為target傳遞給Thread對象。且同一個(gè)Runnable對象可作為多個(gè)Thread的target,這些線程均共享Runnable對象的實(shí)例變量。

方法三,實(shí)現(xiàn)Callable接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.concurrent.Callable;
 
public class ThreadImplementsCallable implements Callable<Integer> {
  private int i;
   
  @Override
  public Integer call() throws Exception {
    for(; i < 100; i++){
      System.out.println(Thread.currentThread().getName() + " " + i);
    }
    return i;
  }
}

Callable接口類似于Runnable接口,但比對方強(qiáng)大,線程執(zhí)行體為call方法,該方法具有返回值和可拋出異常。使用時(shí)將Callable對象包裝為FutureTask對象,通過泛型指定返回值類型。可稍候調(diào)用FutureTask的get方法取回執(zhí)行結(jié)果。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精选视频 | 亚洲国产成人精品激情 | 亚洲精选在线观看 | 精品无码一区二区三区中文字幕 | 国产一区日韩二区欧美三 | 爱情岛论坛亚洲品质自拍视频 | 波多野结衣 在线 | 美女被免费视频 | 男人天堂视频网 | 欧美一区二区三区在线观看不卡 | 天天干夜夜拍 | 99久久999久久久综合精品涩 | 黄瓜视频免费 | 国人精品视频在线观看 | 国产成人精品系列在线观看 | 亚洲国产在线播放 | 精品一成人岛国片在线观看 | 日本人护士免费xxxx视频 | bl动漫在线观看 | 东京干福利 | poronovideos极度残酷 | 亚欧毛片基地国产毛片基地 | 亚洲国产精品自产在线播放 | 国产在线播放91 | 欧美午夜寂寞影院安卓列表 | 国产精品久久久久毛片真精品 | 亚洲精品www久久久久久 | 国产成人免费在线视频 | 日本一区二区三区视频在线观看 | 男生同性啪视频在线观看 | 欧美一级在线视频 | 王小军怎么了最新消息 | 亚洲成人第一页 | 乌克兰粉嫩摘花第一次 | 男人的天堂在线观看入口 | 国产一级特黄aa大片免费 | 国产欧美久久一区二区 | 4hc44四虎永久地址链接 | 国产精品久久免费观看 | 男人操女生 | 欧美黑人换爱交换乱理伦片 |