這篇文章主要介紹“java多線程實現(xiàn)的方法有哪些”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“java多線程實現(xiàn)的方法有哪些”文章能幫助大家解決問題。
目前創(chuàng)新互聯(lián)已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站改版維護、企業(yè)網(wǎng)站設(shè)計、額濟納網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
本教程操作環(huán)境:windows7系統(tǒng)、java10版,DELL G3電腦。
1、lambda表達式創(chuàng)建線程
使用lambda的形式實例化線程任務(wù)類,創(chuàng)建線程對象,并將線程任務(wù)類作為構(gòu)造方法參數(shù)傳入。
package com.kingh.thread.create; /** * 創(chuàng)建線程with lambda * * @author Kingh * @version 1.0 * @date 2019/3/18 10:04 */ public class CreateThreadDemo5_Lambda { public static void main(String[] args) throws Exception { // 使用lambda的形式實例化線程任務(wù)類 Runnable task = () -> { while (true) { // 輸出線程的名字 printThreadInfo(); } }; // 創(chuàng)建線程對象,并將線程任務(wù)類作為構(gòu)造方法參數(shù)傳入 new Thread(task).start(); // 主線程的任務(wù),為了演示多個線程一起執(zhí)行 while (true) { printThreadInfo(); Thread.sleep(1000); } } /** * 輸出當(dāng)前線程的信息 */ private static void printThreadInfo() { System.out.println("當(dāng)前運行的線程名為: " + Thread.currentThread().getName()); try { Thread.sleep(1000); } catch (Exception e) { throw new RuntimeException(e); } } }
2、使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的多線程
可以返回值的任務(wù)必須是Callable接口,類似的,沒有返回值的任務(wù)必須是Runnable接口。執(zhí)行Callable任務(wù)后,可以獲得一個Future對象,通過調(diào)用get可以獲得Callable任務(wù)返回的Object,然后結(jié)合線程池接口ExecutorService可以實現(xiàn)傳說中有返回結(jié)果的多線程。
import java.util.concurrent.*; import java.util.Date; import java.util.List; import java.util.ArrayList; /** * 有返回值的線程 */ @SuppressWarnings("unchecked") public class Test { public static void main(String[] args) throws ExecutionException, InterruptedException { System.out.println("----程序開始運行----"); Date date1 = new Date(); int taskSize = 5; // 創(chuàng)建一個線程池 ExecutorService pool = Executors.newFixedThreadPool(taskSize); // 創(chuàng)建多個有返回值的任務(wù) Listlist = new ArrayList (); for (int i = 0; i < taskSize; i++) { Callable c = new MyCallable(i + " "); // 執(zhí)行任務(wù)并獲取Future對象 Future f = pool.submit(c); // System.out.println(">>>" + f.get().toString()); list.add(f); } // 關(guān)閉線程池 pool.shutdown(); // 獲取所有并發(fā)任務(wù)的運行結(jié)果 for (Future f : list) { // 從Future對象上獲取任務(wù)的返回值,并輸出到控制臺 System.out.println(">>>" + f.get().toString()); } Date date2 = new Date(); System.out.println("----程序結(jié)束運行----,程序運行時間【" + (date2.getTime() - date1.getTime()) + "毫秒】"); } } class MyCallable implements Callable
關(guān)于“java多線程實現(xiàn)的方法有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。