91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

多線程的創建方式有哪些

發布時間:2020-06-12 09:26:31 來源:億速云 閱讀:442 作者:Leah 欄目:編程語言

多線程的創建方式有哪些?針對這個問題,這篇文章給出了相對應的分析和解答,希望能幫助更多想解決這個問題的朋友找到更加簡單易行的辦法。  

創建方式一:繼承 Thread 類:

但 Thread 本質上也是實現了 Runnable 接口的一個實例,它代表一個線程的實例,并且,啟動線程的唯一方法就是通過 Thread 類的 start()實例方法。start()方法是一個 native 方法,它將啟動一個新線程,并執行 run()方法。這種方式實現多線程很簡單,通過自己的類直接 extend Thread,并復寫 run()方法,就可以啟動新線程并執行自己定義的 run()方法。例如:繼承 Thread 類實現多線程,并在合適的地方啟動線程。
  

public class MyThread extends Thread {
  

public void run() {
  

System.out.println("MyThread.run()");
  

}
  

}
  

MyThread myThread1 = new MyThread(); 7.MyThread myThread2 = new MyThread(); myThread1.start();
  

myThread2.start();
  

創建方式二:實現 Runnable 接口的方式實現多線程,并且實例化 Thread,傳入自己的Thread 實例,調用 run( )方法
  

public class MyThread implements Runnable
  

public void run() {
  

System.out.println("MyThread.run()");
  

}
  

}
  

MyThread myThread = new MyThread();
  

Thread thread = new Thread(myThread);
  

thread.start();
  

創建方式三:使用 ExecutorService、Callable、Future 實現有返回結果的多線程:ExecutorService、Callable、Future 這 個 對 象 實 際 上 都 是 屬 于 Executor 框 架 中 的 功 能 類 。
  

下面提供了一個完整的有返回結果的多線程測試例子,在JDK1.5 下驗證過沒問題可以直接使用。代碼如下:
  

import java.util.concurrent.*;
  

import java.util.Date;
  

import java.util.List;
  

import java.util.ArrayList;
  

/**
  

* 有返回值的線程
  

*/
  

@SuppressWarnings("unchecked")

public class Test {
  

public static void main(String[] args) throws ExecutionException,

InterruptedException {
  

System.out.println("----程序開始運行----");

Date date1 = new Date();

int taskSize = 5;

// 創建一個線程池
  

ExecutorService pool = Executors.newFixedThreadPool(taskSize);

// 創建多個有返回值的任務
 

List<Future> list = new ArrayList<Future>();

for (int i = 0; i < taskSize; i++) {

Callable c = new MyCallable(i + " ");

// 執行任務并獲取 Future 對象
  

Future f = pool.submit(c);
  

// System.out.println(">>>" + f.get().toString());

list.add(f);
  

}
 

// 關閉線程池
 

pool.shutdown();
  

// 獲取所有并發任務的運行結果
  

for (Future f : list) {
  

// 從 Future 對象上獲取任務的返回值,并輸出到控制臺

System.out.println(">>>" + f.get().toString());

}
 

Date date2 = new Date();
  

System.out.println("----程序結束運行----,程序運行時間【"

+ (date2.getTime() - date1.getTime()) + "毫秒】");

}
  

}
 

class MyCallable implements Callable<Object> {

private String taskNum;
  

MyCallable(String taskNum) {

this.taskNum = taskNum;

}
 

public Object call() throws Exception {
  

System.out.println(">>>" + taskNum + "任務啟動");
  

Date dateTmp1 = new Date(); 53.Thread.sleep(1000);
  

Date dateTmp2 = new Date();
 

long time = dateTmp2.getTime() - dateTmp1.getTime(); 56.System.out.println(">>>" + taskNum + "任務終止");
  

return taskNum + "任務返回運行結果,當前任務時間【" + time + "毫秒】";

}
 

}

以上便是多線程的創建方式介紹,雖然從篇幅上看很復雜,但是示例代碼非常詳細且容易理解,如果想了解更多相關內容,請關注億速云行業資訊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴国县| 云浮市| 滨海县| 资讯| 上林县| 同江市| 赣榆县| 资源县| 富源县| 若羌县| 句容市| 枞阳县| 布拖县| 云和县| 峨眉山市| 襄城县| 高平市| 宜黄县| 武宣县| 镇远县| 元朗区| 曲周县| 凉城县| 深圳市| 内黄县| 萍乡市| 汉寿县| 昌乐县| 老河口市| 江北区| 栖霞市| 东港市| 哈密市| 云阳县| 民权县| 平陆县| 盐源县| 许昌市| 和田市| 海伦市| 从江县|