并发实现-Callable/Future 实现返回值控制的线程

package chartone;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * 并发实现-Callable/Future 实现返回值控制的线程
 *
 * @author suntao
 * @history 2020-02-04 16:50 suntao 新建
 * @since JDK1.8
 */
public class CallableDemo implements Callable<String> {

    public static void main(String[] args) throws Exception {
        // 创建线程池执行服务
        ExecutorService excute = Executors.newCachedThreadPool();

        CallableDemo cd = new CallableDemo();

        Future<String> fs =  excute.submit(cd);

        // 可以执行其他业务逻辑
        for (int i = 0; i <100 ; i++) {
            System.out.println("mianTread = [" + i + "]");
        }

        // 阻塞操作,只有执行完之后才会进行接下来的操作
        String result = fs.get();
        System.out.println(result);

        excute.shutdown();

    }
    @Override
    public String call() throws Exception {
        for (int i = 0; i <1000 ; i++) {
            System.out.println(i);
        }
        return "我是被调用后的返回值";
    }
}

原文地址:https://www.cnblogs.com/xiaotao726/p/12267608.html

时间: 2024-10-12 18:04:38

并发实现-Callable/Future 实现返回值控制的线程的相关文章

Java 并发编程——Callable+Future+FutureTask

项目中经常有些任务需要异步(提交到线程池中)去执行,而主线程往往需要知道异步执行产生的结果,这时我们要怎么做呢?用runnable是无法实现的,我们需要用callable实现. import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Ex

Java线程:线程安全类和Callable与Future(有返回值的线程)

一.线程安全类 当一个类已经很好的同步以保护它的数据时,这个类就称为线程安全的.当一个集合是安全的,有两个线程在操作同一个集合对象,当第一个线程查询集合非空后,删除集合中所有元素的时候,第二个线程也来执行与第一个线程相同的操作,也许第一个线程查询后,第二个也查出非空,但是此时明显是不对的.如: 1 public class NameList { 2 private List nameList = Collections.synchronizedList(new LinkedList()); 3

Java多线程之~~~Callable接口获得返回值

ThreadPoolExecutor提供了另一个非常强有力的接口,那就是callable.这个接口和runnable类似,但是实现这个 接口的方法是call方法,这个方法是可以返回值的,弥补了runnable不能返回值的悲哀.而且这个方法可以配合ThreadP oolExecutor使用,获得Future接口,从这个接口的名字我们就能知道,返回的这个类似于指向这个线程的一个指针,我 们能通过这个Future接口知道当前线程的运行情况,包括是否已经完成任务,目前运行情况,运行完成后的返回值等, 而

Java Callable接口——有返回值的线程

实际开发过程中,我们常常需要等待一批线程都返回结果后,才能继续执行.<线程等待--CountDownLatch使用>中我们介绍了CountDownLatch的使用,通过使用CountDownLatch,可以实现线程等待. JDK 1.8实现了一种更好的方式,实现线程等待与获取线程返回值,那就是Callable接口,下面我们来看看具体代码. package com.coshaho.learn; import java.util.Random; import java.util.concurren

java 并发runable,callable,future,futureTask

转载自:http://www.cnblogs.com/dolphin0520/p/3949310.html package future_call; import java.util.concurrent.Callable; /** * Created by luozhitao on 2017/8/10. */ public class Task implements Callable<Integer> { // @Override public Integer call() throws E

Java线程:新特征-有返回值的线程

http://lavasoft.blog.51cto.com/62575/222082/ 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/222082 Java线程:新特征-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,

java线程返回值讨论

java线程返回值讨论在线程当中,返回值是个很大的问题.比如:在线程执行到某一步的时候要将数据返回,在程序执行完成后要返回值.在java中,线程的返回值可以使用Future<T>来获取,也可以使用其他的手段.以下讨论一些返回值的一些小手段:1.使用静态变量来进行值的返回使用静态变量来进行值的返回是最简单的一种,也是不可取的一种,这种不仅带来线程的安全性,同时内存一直不能释放,直到系统退出才能释放内存,因此会造成内存花费很多,但是真正在使用的很少.2.使用Futuren<T>来获取这

Callable+ThreadPoolExecutor实现多线程并发并获得返回值(转)

出处:https://blog.csdn.net/kity9420/article/details/80740466 前言 经常会遇到一些性能问题,比如调用某个接口,可能要循环调用100次,并且需要拿到每一次调用的返回结果,通常我们都是放在for循环中一次次的串行调用,这种方式可想而知道有多慢,那怎么解决这个问题呢? 多线程 为了解决以上问题,我使用的方式是多线程.多线程常规的有两种实现方式,即继承Tread类,实现Runnable接口,但是这两种实现方式,有一个共同的问题,就是没有返回值,对于

Java多线程和并发(四),线程返回值获取方式和Callable接口

目录 1.主线程等待法 2.使用Thread类的join()阻塞当前线程,等待子线程执行完毕 3.通过Callable接口实现:通过FutureTask Or线程池获取 四.线程返回值获取方式和Callable接口 1.主线程等待法 public class CycleWait implements Runnable{ private String value; @Override public void run() { try { Thread.currentThread().sleep(50