1. 程式人生 > >多執行緒獲取返回值

多執行緒獲取返回值

執行緒類:

import java.util.concurrent.Callable;
/**
 * 執行緒類,需要返回值的 ,實現Callable介面
 * @author xhc
 *
 */
@SuppressWarnings("rawtypes")
public class MyThread implements Callable{

	@SuppressWarnings("static-access")
	@Override
	public Object call() throws Exception {
		Thread.currentThread().sleep(1000);//睡眠一秒
		return Thread.currentThread().getName();
	}

	
}

測試類:

package com.xjiuge.test;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class App {
	//建立執行緒池
	static ExecutorService pool = Executors.newCachedThreadPool();
	
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		//存放future的集合
		List<Future<String>> list = new ArrayList<>();
		
		long st = System.currentTimeMillis();//開始時間
		//迴圈5次,開啟5個執行緒
		for (int i = 0; i < 5; i++) {
			//獲取執行緒類返回的值,用future接收
			Future<String> future = pool.submit(new MyThread());
			//將future放入list
			list.add(future);
		}
		
		try {
			//遍歷list讀取future中的值
			for (Future<String> future : list) {
				while(true) {
					//判斷執行緒操作是否執行完畢,並且操作沒有被取消掉
					if(future.isDone() && !future.isCancelled()) {
						//呼叫get方法獲取返回值
						String result = future.get().toString();
						System.out.println(result);
						break;
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		long et = System.currentTimeMillis();//結束時間
		System.out.println("總耗時:" + (et - st) + "ms");
	}
}

列印結果:

pool-1-thread-1
pool-1-thread-2
pool-1-thread-3
pool-1-thread-4
pool-1-thread-5
總耗時:1004ms

相關推薦

python執行獲取返回類重新封裝

之前在開發對比測試工具時,需要同步從資料庫拉取資料,拉取資料時間比較長,使用到了多執行緒。但是由於多執行緒沒有返回值,只能執行,因此在搜尋相關資料以後,進行了改進,重新封裝了一下。 以下為封裝後的以及測試程式碼: import threading import time class M

執行獲取返回

執行緒類: import java.util.concurrent.Callable; /** * 執行緒類,需要返回值的 ,實現Callable介面 * @author xhc * */ @SuppressWarnings("rawtypes") public c

python 獲取 執行返回

import time import threading class MyThread(threading.Thread): def __init__(self, target=None, args=(), **kwargs): super(MyThread

執行返回

Runnable,該介面的run方法並無返回值。而Callable的call方法可以根據你傳入的泛型引數返回對應型別的資料。 public class TaskCallable implements Callable<String>{     private

python執行返回案例

問題場景 業務需要對網頁進行PDF轉換,用到了python的pdfkit模組。因報告是成批下來,每批幾百例需要轉換,為了加快報告生成效率,python裡採用了多執行緒寫法。筆者語言是java,所以利用了**Runtime.getRuntime().exec(cm

解決python執行返回問題

前幾天看了下python的多執行緒,但是發現建立的執行緒得不到函式的返回值,查閱資料發現需要重寫Thread類,直接上程式碼。import threading import time """重新定義帶返回值的執行緒類""

Java執行返回的Callable介面

Java多執行緒帶返回值的Callable介面 在面試的時候,有時候是不是會遇到面試會問你,Java中實現多執行緒的方式有幾種?你知道嗎?你知道Java中有可以返回值的執行緒嗎?在具體的用法你知道嗎?如果兩個執行緒同時來呼叫同一個計算物件,計算物件的call方法會被呼叫幾次你知道嗎?如果這些你知道,那麼凱哥(

c++11執行:std::future , std::promise和執行返回

std::future物件可以和asych,std::packaged_task,std::promise一起使用。這篇文章集中討論std::future和std::promise。 我們經常會遇到需要得到執行緒返回結果的情況,現在的問題是我們如何實現。 舉個例子: 假設

利用Future非同步獲取執行返回結果

Future介面是Java標準API的一部分,在java.util.concurrent包中。Future介面是Java執行緒Future模式的實現,可以來進行非同步計算。 有了Future就可以進行三段式的程式設計了,1.啟動多執行緒任務2.處理其他事3.收集多執行

java獲取執行返回

import java.util.concurrent.*; /** * Java執行緒:有返回值的執行緒 * * @author Administrator 2009-11-5 0:41:50 */ public class Test { public static voi

PCB MS SQL跨庫執行SQL 獲取返回

char AS span pre 必須 tno 執行 sql @param 一.SQL跨庫執行SQL 獲取返回值 DECLARE @Dblink nvarchar(100) DECLARE @sql nvarchar(MAX) DECLARE @layer

python執行獲取區域網內所有電腦IP

#coding = utf-8 import os,os.path import threading import time lock = threading.RLock() def action(ip): result = "ip.txt" return1 = os.sy

執行獲取區域網IP並排序

#coding = utf-8 import os,os.path import threading import re from time import ctime, sleep lock = threading.RLock() iplist = [] def action(ip):

java:執行(獲取當前執行的物件)

 * Thread.currentThread(), 主執行緒也可以獲取 public class Demo2_CurrentThread { public static void main(String[] args) { new Thread() { public

java:執行(獲取名字和設定名字)

* 1.獲取名字     * 通過getName()方法獲取執行緒物件的名字 * 2.設定名字     * 通過建構函式可以傳入String型別的名字  package com.heima.threadmethod; p

如何獲得執行返回

最近在學習多執行緒程式設計技術過程中,遇到一個問題:如何獲取執行緒的返回值?   執行緒定義之初: UINT Class::Thread(LPVOID lpParam) { return bResult; }   開啟執行緒: CWinTh

32位jdk中, long 型別的變數執行中賦操作問題

package im.zxd.test; public class LongTest {     public static  long num = 0;     public static final long value1=-1L;     public stati

執行Session賦,可能存在Index was outside the bounds of the array.

2018/11/01 碰到了Session賦值導致整個網站崩潰了,檢查日誌,發現是索引越界 System.IndexOutOfRangeException: Index was outside the bounds of the array.    at System.Col

Python大資料分析——執行獲取滬深股票歷史資料

要進行資料分析,得獲取資料。對於金融資料,我們有很多獲取方式,如雅虎金融,谷歌金融,QuantQuote,EODData,下面列出它們具體的地址:當然,如果要獲取國外金融資料,我們主要從上面這些網站上獲取;但如要獲取國內股票資料,下面有一個很方便的介面,且是用python寫的

使用執行獲取大量資料集合中的關鍵資料

/** * 將一個list均分成n個list * @param source * @return */ public <T> List<