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

多线程获取返回值

2022年11月09日 11:52:14服务端20

线程类:

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多线程
分享给朋友:

“多线程获取返回值” 的相关文章

Java 多线程通过 Mybatis 获取 Oracle 序列值重复问题处理

Java 多线程通过 Mybatis 获取 Oracle 序列值重复问题处理 在同一个事务内开多线程访问序列值时,会取出同一个值。 select mySequence.nextval from dual 解决方法是将查询语句放在一个新事务中,同时增加同步约束。...

Java创建线程

Java创建线程

目录 既然说到线程,在这里就给大家普及一下线程。 线程(Thread): 那么,进程是什么呢? 接下来,就让我们步入主题: 在 Java 中,是这样说线程的: 创建一个新的执行线程有两种方法。  第一种:创建一个...

JAVA多线程实现及四种线程池使用

JAVA多线程实现及四种线程池使用

Java多线程实现及四种线程池和new Thread的使用及差别 线程的生命周期分为:new,runnable,running,block,termate. java多线程的几种实现方式: 继承Thread类,重写run方法...

Java多线程实现TCP网络Socket编程(C/S通信)

Java多线程实现TCP网络Socket编程(C/S通信)

目录 开篇必知必会 一、多线程技术 二、实现多线程接收 1、单线程版本  2、多线程版本 三、多线程与进程的关系 四、客户端界面完整代码 五、多线程通信对比 最后 开篇必知必会 在前一篇《基于TC...

JAVA多线程常见的十大问题

JAVA多线程常见的十大问题

一、进程与线程?并行与并发? 进程代表一个运行中的程序,是资源分配与调度的基本单位。进程有三大特性: 1、独立性:独立的资源,私有的地址空间,进程间互不影响。 2、动态性:进程具有生命周期。 3、并发性:多进程可以在单核CPU上并发运行。 线程代表进...

Java多线程讲解,超详细!可获取相关笔记

Java多线程讲解,超详细!可获取相关笔记

高频面经汇总:https://blog.csdn.net/qq_40262372/article/details/116075528 七、多线程 7.1什么是线程和进程? 7.1.1进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的(很...

史上最全 Java 多线程面试题及答案

史上最全 Java 多线程面试题及答案

这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。 这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去...

java 实现多线程的两种方式

一.问题引入         说到这两个方法就不得不说多线程,说到多线程就不得不提实现多线程的两种方式继承Thread类和实现Runable接口,下面先看这两种方式的区别。 二. Java中实现多线程的两...

Java多线程初探

Java多线程初探

程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,是静态的代码。 进程 是一个内存中运行的应用程序,每个进程都有一个独立的内存空间 。进程是程序的⼀次执行过程,是动态的。系统运行⼀个程序即是⼀个进程从创建,运行到消亡的过程。也就是说,⼀个进程就...

JAVA多线程及线程状态转换

JAVA多线程及线程状态转换

以下内容整理自:http://blog.csdn.net/wtyvhreal/article/details/44176369 线程:是指进程中的一个执行流程。  线程与进程的区别:每个进程都需要操作系统为其分配独立的内存地址空间,而...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。