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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java多線程三種主要實現方式解析

Java多線程三種主要實現方式解析

2020-07-21 18:03章冒冒2020 Java教程

這篇文章主要介紹了Java多線程三種主要實現方式解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

多線程三種主要實現方式:繼承Thread類,實現Runnable接口、Callable和Futrue。

一、簡單實現

?
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
45
46
47
48
49
50
51
52
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
 
public class T02_HowToCreateThread {
  //1.繼承Thread類
  static class MyThread extends Thread{
    @Override
    public void run() {
      System.out.println("MyThread-->");
    }
  }
  //3.實現Runnable接口
  static class MyRun implements Runnable{
 
    @Override
    public void run() {
      System.out.println("MyRunable-->");
    }
  }
  //4.實現Callable接口
  static class MyCall implements Callable{
 
    @Override
    public Object call() throws Exception {
      System.out.println("myCallable-->");
      return 1;
    }
  }
  public static void main(String[] args) throws ExecutionException, InterruptedException {
    //1.繼承Thread類
    new MyThread().start();
    //2.lambda與繼承Thread類類//1.繼承Thread類似,最簡單
    new Thread(()->{
      System.out.println("lambda-->");
    }).start();
    //3.實現Runnable接口
    new Thread(new MyRun()).start();
    new Thread(new Runnable() {
      @Override
      public void run() {
        System.out.println("simple->Runnable");
      }
    }).start();
    //4.實現Callable接口,并用包裝器FutureTask來同時實現Runable、Callable兩個接口,可帶返回結果
    MyCall mycall = new MyCall();
    FutureTask futureTask = new FutureTask(mycall);
    new Thread(futureTask).start();
    System.out.println(futureTask.get());
  }
}

二、使用ExecutorService、Callable和Future一起實現帶返回值

?
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
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
 
/**
 * 使用ExecutorsService、Callable、Future來實現多個帶返回值的線程
 */
public class T02_HowToCreateThread02 {
  static class MyCallable implements Callable{
    private int taskNum;
 
    public MyCallable(int taskNum){
      this.taskNum = taskNum;
    }
    @Override
    public Object call() throws Exception {
      System.out.println("任務"+taskNum);
      return "MyCallable.call()-->task"+taskNum;
    }
  }
  public static void main(String[] args) throws ExecutionException, InterruptedException {
    int num = 5;
    //創建一個線程池
    ExecutorService pool = Executors.newFixedThreadPool(num);
    List<Future> futureList = new ArrayList<Future>();
    for (int i = 0; i < num; i++){
      MyCallable mc = new MyCallable(i);
      //執行任務,并返回值
      Future future = pool.submit(mc);
      futureList.add(future);
    }
    pool.shutdown();
    for (Future f: futureList){
      System.out.println(f.get());
    }
  }
}

結果:

Java多線程三種主要實現方式解析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/helq/p/13264050.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本国产最新一区二区三区 | 亚洲va在线va天堂成人 | 美女用屁股把人吞进肚子 | 四虎伊人 | 妹妹你插的我好爽 | 免费一级毛片在级播放 | 免费观看在线永久免费xx视频 | 精品国产一二三区在线影院 | 国产成人高清亚洲一区91 | 国产成人精品.一二区 | 变态 调教 视频 国产九色 | 国产小青蛙| 三上悠亚精品专区久久 | 9丨精品国产高清自在线看 9久热这里只有精品免费 | 99久久香蕉国产综合影院 | 91国内精品久久久久影院优播 | 男人的天堂久久爱 | 国产亚洲福利精品一区 | 国产精品自在欧美一区 | 欧美一区二区三区免费不卡 | 国产一区二区三区四卡 | 奇米久草 | 好大好猛好深好爽视频 | 冰漪丰满大乳人体图片欣赏 | 成年人在线观看视频 | 99资源在线观看 | 成人影院视频 | 厨房里摸着乳丰满在线观看 | 精品无码一区在线观看 | 欧美se图 | 69老司机亚洲精品一区 | 亚洲成年网站在线观看 | 日本免费一区二区三区四区五六区 | 欧美一级裸片又黄又裸 | 视频二区 素人 欧美 日韩 | julianann办公室| 天天色影视综合网 | 无码爽死成人777在线观看网站 | 亚洲精品色综合久久 | 欧美在线视频 一区二区 | 91麻豆制片厂 |