Java 完成多線程的幾種方法匯總。本站提示廣大學習愛好者:(Java 完成多線程的幾種方法匯總)文章只能為提供參考,不一定能成為您想要的結果。以下是Java 完成多線程的幾種方法匯總正文
我們先來看段示例代碼
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();
// }
// }
//辦法二:完成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();
// }
// }
//辦法三:完成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();
}
}
}
接上去我們來具體商量下Java 完成多線程的幾種方法
辦法一,繼續自Thread
public class ThreadExtendsThread extends Thread {
private int i;
@Override
public void run() {
for(; i < 100; i++) {
System.out.println(getName() + " " + i);
}
}
}
run辦法為線程履行體,ThreadExtendsThread對象即為線程對象。
辦法二,完成Runnable接口
public class ThreadImplementsRunnable implements Runnable {
private int i;
@Override
public void run() {
for(; i < 100; i++){
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}
run辦法為線程履行體,應用時New一個Thread對象,Runnable對象作為target傳遞給Thread對象。且統一個Runnable對象可作為多個Thread的target,這些線程均同享Runnable對象的實例變量。
辦法三,完成Callable接口
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接口,但比對方壯大,線程履行體為call辦法,該辦法具有前往值和可拋出異常。應用時將Callable對象包裝為FutureTask對象,經由過程泛型指定前往值類型。可稍候挪用FutureTask的get辦法取回履行成果。