JAVA多執行緒的實現
阿新 • • 發佈:2021-01-06
目錄
參考連結
啟動執行緒
的唯一方法就是通過 Thread類的start()例項方法
start()方法是一個 native方法,它將啟動一個新執行緒,並 執行run()方法
第一二種方式:無返回值
通過重寫run方法,run方式的返回值是void,所以沒有辦法返回結果
繼承Thread類
- 通過自己的類直接 extends Thread
- 重寫run()方法,就可以啟動新執行緒並執行自己定義的run()方法
- start() 啟動執行緒
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("start");
}
}
public static void main(String[] args) {
MyThread myThread1 = new MyThread();
myThread1.start();
}
實現Runnable介面
- 實現Runnable介面,並 重寫run() 方法
- 實現Runnable介面的 實現類的例項物件
public class MyThread implements Runnable {
@Override
public void run() {
System.out.println("start");
}
}
public static void main(String[] args) {
MyThread myThread2 = new MyThread();
Thread thread = new Thread(myThread2);
thread.start();
}
ExecutorService、Callable都是屬於Executor框架;有返回值
實現Callable介面
- 實現Callable介面 ,並 重寫Call() 方法
- 實現Callable介面的 實現類的例項物件,使用 FutureTask類包裝Callable物件,該FutureTask物件封裝了Callable物件的Call方法的返回值
- 使用 FutureTask物件作為Thread物件的target 建立並啟動執行緒
- 呼叫 FutureTask物件的get() 來獲取子執行緒執行結束的返回值
public class MyThread implements Callable<String>{
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
public static void main(String[] args) throws Exception {
MyThread myThread3 = new MyThread();
FutureTask<String> future = new FutureTask<>(myThread3);
Thread t = new Thread(future);
t.start();
...
String result = future.get(); //同步獲取返回結果
System.out.println(result);
}
執行緒池
public class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("start");
}
public static void main(String[] args) {
MyThread task = new MyThread();
ExecutorService ex = Executors.newCachedThreadPool();
ex.execute(task);
...
}
}