我們先來看段示例代碼
導入java.util.concurrent.callable; import java.util.concurrent.futuretask; public Class class main {public static void main(string [] args){//////////// // i); // if(i == 5){// threadextendSthreadSthreadSthreadSthRead = new threadextendSthRead(); // threadextendSthreadSthRead.start(); //} //} //} // for(i = 0; i = 0; i <100; i++) “ + i); // if(i == 5){// runnable runnable = new threadimplempleRunnable(); // new thread(runnable).start(); // new thread(runnable).start(runnable).start(); //}; //} //} //} //} //} ///////////////////////////- FutureTask <integer> futureTask = new FutureTask <>(可呼叫); for(i = 0; i <100; i ++){system.out.println(thread.currentthread()。getName() +“” + i); if(i == 5){new thread(futureTask).start();新線程(FutureTask).start(); }} try {system.out.println(“ futuretask ruturn:” + futuretask.get()); } catch(異常E){e.printstacktrace(); }}}}接下來我們來詳細探討下爪哇實現多線程的幾種方式
方法一,繼承自線
公共類ThreadExtendSthread擴展了線程{private int i; @Override public void run(){for(; i <100; i ++){system.out.println(getName() +“” + i); }}}}運行方法為線程執行體
方法二,實現可運行接口
公共類線程圖像runnable實現可運行的{private int i; @Override public void run(){for(; i <100; i ++){system.out.println(thread.currentthread()。getName() +“” + i); }}}}運行方法為線程執行體,使用時新一個線程對象,可運行的對像作為目標傳遞給線程對象。且同一個可運行對象可作為多個線程的track,這些線程均共享
方法三,實現callable接口
導入java.util.concurrent.callable; public class threadimplementclable callable callable <integer> {private int i; @Override public Integer call()引發異常{for(; i <100; i ++){system.out.println(thread.currentthread()。getName()。getName() +“” + i); }返回i; }}}可呼叫接口類似於可運行接口,但比對方強大,線程執行體為,線程執行體為,該方法具有返回值和可拋出異常。使用時將,該方法具有返回值和可拋出異常。使用時將callable futureTask對象,通過泛型指定返回值類型。可稍候調用futuretask的