搜尋
首頁JavaJava基礎java多執行緒如何實現

java多執行緒如何實現

Dec 04, 2019 am 11:06 AM
java

java多執行緒如何實現

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基礎教學欄位。

以上是java多執行緒如何實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器