Callable的简单使用】的更多相关文章

说起java的线程操作,都会想到Thread和Runable这两个, 这两个类可以实现异步和同步. 在大多数的java开发中, 这两个都是实现异步的线程来使用, 但是现在考虑一种情况: 发出一条线程, 但是得等待这条线程返回结果后, 我们再去发另一个线程. (读者肯定会想到用线程的同步机制做处理) 下面介绍Callable的使用, 也是最近一段时间才学到的新技能, 在这里记录一下.(我的理解就是: Callable是串联级别的线程) 简单介绍一下Callable: 1. Callable和Run…
Runnable 与 Callable的区别: (1)Callable规定的方法是call(),Runnable规定的方法是run(). (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的 (3)call方法可以抛出异常,run方法不可以 (4)运行Callable任务可以拿到一个Future对象,Future 表示异步计算的结果.(PS: 特别注意,executorService.submit(Runnable task) 也会返回future, 但是没有fut…
//AsyncTask从本质上讲,是对ThreadPool和handler的封装. 在学习线程池相关的知识时,看到书中提到AsyncTask的实现中使用到了ThreadPool,于是把源码翻了出来, 源码并不长,顺便分析了一下.小白挑战,大牛勿喷(好像大牛也不会看到...) 成员变量的解析 我打算先把成员变量分析一下(AsyncTask源码不是很复杂,可以这么做,算是特殊情况吧),算是为后面分析AsyncTask的工作流程做铺垫. 线程池 THREAD_POOL_EXECUTOR //cpu核心…
在 tornado 中异步无阻塞的执行耗时任务 在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在某一个时刻执行了一个耗时的任务,那么就会阻塞在这里,无法响应其他的任务请求,这个和 tornado 的高性能服务器称号不符,所以我们要想办法把耗时的任务转换为不阻塞主线程,让耗时的任务不影响对其他请求的响应. 在 python 3.2 上,增加了一个并行库 concurrent.futures,这个…
在 tornado 中异步无阻塞的执行耗时任务 在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在某一个时刻执行了一个耗时的任务,那么就会阻塞在这里,无法响应其他的任务请求,这个和 tornado 的高性能服务器称号不符,所以我们要想办法把耗时的任务转换为不阻塞主线程,让耗时的任务不影响对其他请求的响应. 在 python 3.2 上,增加了一个并行库 concurrent.futures,这个…
  Executor框架简介 Java的线程既是工作单元,也是执行机制.从JDK5开始,把工作单元和执行机制分离开来. Executor框架由3大部分组成 任务. 被执行任务需要实现的接口:Runnable接口或Callable接口 异步计算的结果.Future接口和FutureTask类. 任务的执行.两个关键类ThreadPoolExecutor和SeheduledThreadPoolExecutor. 任务 Runnable接口 不含有运行结果 public interface Runna…
在<java NIO>作者PPT<How to Build a Scalable Multiplexed Server With NIO> 和 Doug Lea <Scalable IO in Java>PPT中  都有java nio的实现是通过reactor pattern 来实现的有说明.java nio作为一种跨平台IO操作. 在不同平台上面封装了相应平台的IO模型. 在reactor pattern 作者中已经提及,通过reactor pattern 模式能够…
记一次主线程等待子线程结束的多种方法的学习 在学习多线程时,最开始遇到的问题其实是"计算子线程运行时间",写到最后发现本文和标题更为符合,但是仍然基于问题:"在主线程中获取子线程的运行时间". while循环 对于"主线程如何获取子线程总运行时间"的问题,最开始想到的是使用while循环进行轮询: Thread t = new Thread(() -> { //子线程进行字符串连接操作 int num = 1000; String s =…
我们大家都知道,在 Java 中创建线程主要有三种方式: 继承 Thread 类: 实现 Runnable 接口: 实现 Callable 接口. 而后两者的区别在于 Callable 接口中的 call() 方法可以异步地返回一个计算结果 Future,并且一般需要配合ExecutorService 来执行.这一套操作在代码实现上似乎也并不难,可是对于call()方法具体怎么(被ExecutorService)执行的,以及 Future 这个结果是怎么获取的,却又不是很清楚了. 那么本篇文章,…
@ 目录 1.JUC 简介 2.线程和进程 3.并非与并行 4.线程的状态 5.wait/sleep的区别 6.Lock 锁(重点) 1.Lock锁 2.公平非公平: 3.ReentrantLock 构造器 4.Lock 锁实现步骤: 7.synchronized 和 lock 锁的区别 8.生产者和消费者问题(通信问题) 1.Synchronized 版本 2.JUC 版本 9.八个有关锁的问题 关于锁的八个问题 问题1:两个同步方法,先执行发短信还是打电话? 问题2:如果发短信延迟2秒,谁先…