java實作多執行緒的方法:(推薦:java影片教學)
方式一:繼承Thread類別的方式
1、建立一個繼承於Thread類別的子類別
2、重寫Thread類別中的run():將此執行緒要執行的操作宣告在run()
3、建立Thread的子類別的物件
4、呼叫此物件的start():①啟動執行緒②呼叫目前執行緒的run()方法
方式二:實作Runnable介面的方式
1、建立實作Runnable介面的類別
2、實作Runnable介面中的抽象方法:run():將會建立的執行緒要執行的操作宣告在此方法中
3、建立Runnable介面實作類別的物件
4、將此物件作為參數傳遞到Thread類別的建構器中,建立Thread類的物件
5、呼叫Thread類別中的start():① 啟動執行緒 ② 呼叫執行緒的run() --->呼叫Runnable介面實作類別的run()
以下兩種方式是jdk1.5新增的!
方式三:實作Callable介面
說明:
1、與使用Runnable相比, Callable功能更強大些
2、實作的call()方法比較run()方法,可以傳回值
3、方法可以拋出例外
4、支援泛型的回傳值
5、需要藉助FutureTask類,例如取得回傳結果
Future介面可以對特定Runnable、Callable任務的執行結果進行取消、查詢是否完成、取得結果等。 FutureTask是Futrue介面的唯一的實作類別FutureTask 同時實作了Runnable, Future介面。它既可以當作Runnable被執行緒執行,又可以作為Future得到Callable的回傳值
#方式四:使用執行緒池
##說明:事先創建好多個線程,放入線程池中,使用時直接獲取,使用完放回池中。可以避免頻繁創造銷毀、實現重複利用。類似生活中的大眾運輸工具。 好處:1、提高回應速度(減少了創建新線程的時間)2、降低資源消耗(重複利用線程池中線程,不需要每次都創建)3、便於線程管理範例:import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; import java.util.concurrent.ThreadPoolExecutor; //方式一 class ThreadTest extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } // 方式二 class RunnableTest implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } // 方式三 class CallableTest implements Callable<Integer> { @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + ":" + i); sum += i; } return sum; } } // 方式四 class ThreadPool implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } public class Test { public static void main(String[] args) { // 继承Thread ThreadTest thread = new ThreadTest(); thread.setName("方式一"); thread.start(); // 实现Runnable RunnableTest runnableTest = new RunnableTest(); Thread thread2 = new Thread(runnableTest, "方式二"); thread2.start(); // 实现Callable<> 有返回值 CallableTest callableTest = new CallableTest(); FutureTask<Integer> futureTask = new FutureTask<>(callableTest); new Thread(futureTask, "方式三").start(); // 返回值 try { Integer integer = futureTask.get(); System.out.println("返回值(sum):" + integer); } catch (Exception e) { e.printStackTrace(); } // 线程池 ExecutorService pool = Executors.newFixedThreadPool(10); ThreadPoolExecutor executor = (ThreadPoolExecutor) pool; /* * 可以做一些操作: * corePoolSize:核心池的大小 * maximumPoolSize:最大线程数 * keepAliveTime:线程没任务时最多保持多长时间后会终止 */ executor.setCorePoolSize(5); // 开启线程 executor.execute(new ThreadPool()); executor.execute(new ThreadPool()); executor.execute(new ThreadPool()); executor.execute(new ThreadPool()); } }
java基礎教學欄位。
以上是java多執行緒如何實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!