您好,登錄后才能下訂單哦!
多線程的創建方式有哪些?針對這個問題,這篇文章給出了相對應的分析和解答,希望能幫助更多想解決這個問題的朋友找到更加簡單易行的辦法。
創建方式一:繼承 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 + "毫秒】";
}
}
以上便是多線程的創建方式介紹,雖然從篇幅上看很復雜,但是示例代碼非常詳細且容易理解,如果想了解更多相關內容,請關注億速云行業資訊。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。