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

服務(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í)有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国模娜娜一区二区三区 | 日韩日b视频| 精品久久久久中文字幕日本 | 日本精品久久久久久久久免费 | 美女机机对机机的视频(免费) | 国内小情侣一二三区在线视频 | 亚洲成色WWW久久网站夜月 | 亚洲国产自拍在线 | 日本免费高清在线观看播放 | 日本久久影视 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 欧美高清milf在线播放 | 天天做日日做天天添天天欢公交车 | 羞羞漫画视频 | 亚洲精品在线免费看 | 日韩精品免费一区二区 | 爽好舒服把腿张小说 | 亚洲国产AV一区二区三区四区 | fc2免费人成在线 | ipx358cn出差被男上司在线 | 日本大学jalapsikix | 特色特色大片在线 | 鞋奴的视频VK | 91久久国产视频 | 四虎影视在线永久免费观看 | 国产美女亚洲精品久久久久久 | 日本中文字幕一区二区高清在线 | 白丝校花掀起短裙呻吟小说 | 精品国产精品人妻久久无码五月天 | 青草青草伊人精品视频 | 国产成人亚洲综合网站不卡 | 日本高清视频一区二区 | 色天天久久 | 日本免费一区二区三区a区 日本免费三片在线观看 | 亚洲卡一卡2卡三卡4麻豆 | 轻轻色在线视频中文字幕 | 午夜影院一区二区三区 | 精品亚洲永久免费精品 | 咪咪爱网友自拍 | 236z最新伦理 | 日本人成大片在线 |