
多线程
张书康
学海无涯。
展开
-
多线程 | CompletionService异步非阻塞获取并行任务执行结果
多线程 | CompletionService异步获取并行任务执行结果,主要分两点来讨论CompletionService: 1)使用方式 2)源码分析1)使用方式使用Future和Callable可以获取线程执行结果,但获取方式确实阻塞的,根据添加到线程池中的线程顺序,依次获取,获取不到就阻塞。 为了解决这种情况,可以采用轮询的做法。这里主要讨论用 Comple原创 2018-01-04 14:22:12 · 9917 阅读 · 2 评论 -
多线程 | 并发包中的Future、Callable、FutureTask 源码分析
引言 @RequestMapping(value = "/socialInsuPayStatus",method =RequestMethod.PUT) public Callable compSocialPay(@RequestBody ParamDto paramDto ){ return ()-> bizService.compSocialInsuPay原创 2018-01-24 13:52:20 · 434 阅读 · 0 评论 -
多线程 | AQS | 条件队列 Condition 源码分析
1)条件队列概念:条件队列是当某个条件不满足状态时,挂起自己并释放锁,一旦等待条件为真,则立即醒来。这也是条件队列提供的主要功能。 Object的wait/notify/notifyAll等方法构成了内部条件队列的API,在lock中又是怎么实现的呢? 就是这里要讨论的条件队列 condition。 具体使用示例就不展示了,和 wait/notify/notifyAll 使用场景类似...原创 2018-02-11 21:04:19 · 1009 阅读 · 0 评论 -
多线程 | AQS锁 | 读写锁ReentrantReadWriteLock详解
/** * Created by zhangshukang on 2018/2/7. */public class ReentrantReadWriteLockTest { public static void main(String[] args) throws InterruptedException { String str = "hello"; ...原创 2018-02-08 14:16:05 · 472 阅读 · 0 评论 -
Java | 多线程 | 史上最全Java多线程面试题及答案(持续更新中)
1、Synchronized和Violatile的本质区别? 1)Synchronized底层实现依赖于jvm的监视器monitor,对编译后的代码指令加锁。所以会出现阻塞情况。而Violatile底层实现则是借助于寄存器,也就是工作内存,在读取Violatile变量时,jvm会告诉寄存器,该变量的值需要同步到主内存,不会出现阻塞的情况。 2)线程池安全主要涉及两个方面:原子...原创 2018-07-25 18:42:26 · 1709 阅读 · 0 评论 -
Java | 多线程 | ThreadLocal结合线程池的正确使用方式
1)问题:才发现,写这篇博客之前,自己一直在以一种错误的姿势在用threadLocal对象。但我不信就我一人姿势不对。 场景就是threadLocal在项目中使用时,出现取值错误的情况。原因是 threadLocal在多线程环境下使用不当,花了不少时间排查,因为在不该出问题的地方出了问题,最终还是排查到线程池上。之前一直没有问题,或许是因为并发不高。最终今天还是遇到了问题(出来混,迟早是要还...原创 2018-07-27 17:03:10 · 9954 阅读 · 8 评论 -
Java | Java 线程模型 | 用户线程 | 内核线程
概述在以前的操作系统中,没有线程的概念。进程是资源分配和调度的最小单元。引入线程的概念以后,线程则是资源调度和分配的最小单元。线程又分为用户线程和内核线程。用户线程:语言层面创建的线程,比如 java语言中多线程技术,通过语言提供的线程库来创建、销毁线程。内核线程:内核线程又称为守护线程 Daemon线程,用户线程的运行必须依赖内核线程,通过内核线程调度器来分配到相应的处理器上。线程模型...原创 2019-03-28 18:06:00 · 1748 阅读 · 0 评论