真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java實現(xiàn)多線程的方法

方式一:繼承Thread類的方式

站在用戶的角度思考問題,與客戶深入溝通,找到武陵網(wǎng)站設(shè)計與武陵網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機、企業(yè)郵箱。業(yè)務(wù)覆蓋武陵地區(qū)。

1、創(chuàng)建一個繼承于Thread類的子類

2、重寫Thread類中的run():將此線程要執(zhí)行的操作聲明在run()

3、創(chuàng)建Thread的子類的對象

4、調(diào)用此對象的start():①啟動線程 ②調(diào)用當(dāng)前線程的run()方法

方式二:實現(xiàn)Runnable接口的方式

1、創(chuàng)建一個實現(xiàn)Runnable接口的類

2、實現(xiàn)Runnable接口中的抽象方法:run():將創(chuàng)建的線程要執(zhí)行的操作聲明在此方法中

3、創(chuàng)建Runnable接口實現(xiàn)類的對象

4、將此對象作為參數(shù)傳遞到Thread類的構(gòu)造器中,創(chuàng)建Thread類的對象

5、調(diào)用Thread類中的start():① 啟動線程  ② 調(diào)用線程的run() --->調(diào)用Runnable接口實現(xiàn)類的run()

以下兩種方式是jdk1.5新增的!

方式三:實現(xiàn)Callable接口

說明:

1、與使用Runnable相比, Callable功能更強大些

2、實現(xiàn)的call()方法相比run()方法,可以返回值

3、方法可以拋出異常

4、支持泛型的返回值

5、需要借助FutureTask類,比如獲取返回結(jié)果

Future接口可以對具體Runnable、Callable任務(wù)的執(zhí)行結(jié)果進行取消、查詢是否完成、獲取結(jié)果等。FutureTask是Futrue接口的唯一的實現(xiàn)類FutureTask 同時實現(xiàn)了Runnable, Future接口。它既可以作為Runnable被線程執(zhí)行,又可以作為Future得到Callable的返回值

方式四:使用線程池

說明:

提前創(chuàng)建好多個線程,放入線程池中,使用時直接獲取,使用完放回池中??梢员苊忸l繁創(chuàng)建銷毀、實現(xiàn)重復(fù)利用。類似生活中的公共交通工具。

好處:

1、提高響應(yīng)速度(減少了創(chuàng)建新線程的時間)

2、降低資源消耗(重復(fù)利用線程池中線程,不需要每次都創(chuàng)建)

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 {

	@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();

		// 實現(xiàn)Runnable
		RunnableTest runnableTest = new RunnableTest();
		Thread thread2 = new Thread(runnableTest, "方式二");
		thread2.start();

		// 實現(xiàn)Callable<> 有返回值
		CallableTest callableTest = new CallableTest();
		FutureTask 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:最大線程數(shù)
		 * keepAliveTime:線程沒任務(wù)時最多保持多長時間后會終止
		 */
		executor.setCorePoolSize(5);

		// 開啟線程
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());
		executor.execute(new ThreadPool());

	}

}

以上就是java多線程如何實現(xiàn)的詳細內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!


網(wǎng)站題目:java實現(xiàn)多線程的方法
網(wǎng)站網(wǎng)址:http://weahome.cn/article/gchjsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部