资讯专栏INFORMATION COLUMN

Think In Java 读书笔记:Concurrency

DevTTL / 866人阅读

摘要:类是一种有效的广泛使用的以工作队列为基础的的线程池的正确实现,无须尝试编写自己的线程池这样容易出错。是并发编程库新添加的类它提供的方法可以返回各线程的返回值与接口类似于但是无法返回结果也无法返回异常。返回的结果可以被拿到。

package com.snda.sync.impl.test;

import java.util.ArrayList;
import java.util.concurrent.*;

/**
 * Executor类是一种有效的广泛使用的以工作队列为基础的的线程池的正确实现,无须尝试编写自己的线程池,这样容易出错。
 * Callable是并发编程库Concurrent新添加的类,它提供的call()方法可以返回各线程的返回值
 * Callable 与 future :http://blog.csdn.net/ghsau/article/details/7451464
 * Callable 接口类似于Runnable但是Callable无法返回结果也无法返回异常。Callable返回的结果可以被Future拿到。
 * 通过submit来执行Callable线程并取得线程的返回值
 *
 * 在Java中如果需要设定代码执行的最长时间,即超时,可以用Java的ExecutorService 类配合Future接口来实现,Future接口
 * 是Java线程的Future模式的实现,可以来进行异步运算。
 * Created by xuyifei on 14-4-22.
 */
class TaskWithResult implements Callable {

    private int id;

    public TaskWithResult(int id) {
        this.id = id;
    }

    @Override
    public String call() throws Exception {
        return "result of TaskWithResult " + id;

    }
}

public class CallableDemo {
    public static void main(String[] args) {
        ExecutorService exec = Executors.newCachedThreadPool();
        ArrayList> results = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            results.add(exec.submit(new TaskWithResult(i)));
        }
        for (Future fs : results) {
            try {
                System.out.println(fs.get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            } finally {
                exec.shutdown();
            }
        }


    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64089.html

相关文章

  • Java8实战》-第三章读书笔记(Lambda表达式-01)

    摘要:之前,使用匿名类给苹果排序的代码是的,这段代码看上去并不是那么的清晰明了,使用表达式改进后或者是不得不承认,代码看起来跟清晰了。这是由泛型接口内部实现方式造成的。 # Lambda表达式在《Java8实战》中第三章主要讲的是Lambda表达式,在上一章节的笔记中我们利用了行为参数化来因对不断变化的需求,最后我们也使用到了Lambda,通过表达式为我们简化了很多代码从而极大地提高了我们的...

    longshengwang 评论0 收藏0
  • java 8 实战》读书笔记 -第三章 Lambda表达式

    摘要:利用前面所述的方法,这个例子可以用方法引用改写成下面的样子构造函数引用对于一个现有构造函数,你可以利用它的名称和关键字来创建它的一个引用。 第三章 Lambda表达式 函数式接口 函数式接口就是只定义一个抽象方法的接口,哪怕有很多默认方法,只要接口只定义了一个抽象方法,它就仍然是一个函数式接口。 常用函数式接口 showImg(https://segmentfault.com/img...

    whinc 评论0 收藏0
  • java 8 实战》读书笔记 -第十三章 函数式的思考

    摘要:当我们希望能界定这二者之间的区别时,我们将第一种称为纯粹的函数式编程,后者称为函数式编程。函数式编程我们的准则是,被称为函数式的函数或方法都只能修改本地变量。另一种观点支持引用透明的函数式编程,认为方法不应该有对外部可见的对象修改。 一、实现和维护系统 1.共享的可变数据 如果一个方法既不修改它内嵌类的状态,也不修改其他对象的状态,使用return返回所有的计算结果,那么我们称其为纯粹...

    Donne 评论0 收藏0
  • 走入并行世界

    摘要:无锁无锁的并行都是无障碍的,但不同的是无锁的并发保证了必然有一个线程能够在有限步骤内离开临界区。有关并行的两个重要定律未完待续实战高并发程序设计第一章走入并行世界读书笔记欢迎加入咖啡馆的春天。 必须知道的几个概念 同步(Synchronous)和异步(Asynchronous) 同步方法调用一旦开始,调用者必须等待方法调用返回后才能继续后续行为。异步方法调用更像一个消息传递,一旦开始就...

    Coding01 评论0 收藏0

发表评论

0条评论

DevTTL

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<