当前位置:首页 > 服务端 > 多线程获取返回值

多线程获取返回值

线程类:

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

 

作者:xjiuge
来源链接:https://blog.csdn.net/xjiuge/article/details/81092788

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68661.html

标签: Java多线程
分享给朋友: