02 2021 档案

摘要:内置锁 Java中,内置锁指的是synchronize关键字代表的锁机制。在前面的文章中曾介绍了synchronize的用法。synchronize的特点: 使用简单,不需要显式地加锁和释放锁 因获取锁而被阻塞的线程,不能响应中断、不支持超时机制 不支持多个condition 非公平的锁,不保证最先 阅读全文
posted @ 2021-02-21 21:37 陈玉林 阅读(71) 评论(0) 推荐(0)
摘要:线程池的正确创建方式 虽然Executors类中提供了许多的工厂方法来创建各种的线程池,但是在实际的生产环境中,却不推荐直接使用这些线程池。国内大厂阿里巴巴的Java开发指导手册就约束了这个行为。不推荐使用的原因主要是: Executors的静态方法提供的线程池默认使用无解的阻塞队列,如果提交的计算 阅读全文
posted @ 2021-02-21 21:36 陈玉林 阅读(175) 评论(0) 推荐(0)
摘要:Future基本介绍 在上一篇文章中,我们用到了Future,Future具体可以用来做什么呢?要搞明白这个问题,首先要知道Future从哪儿来。下面是一个简单的例子: import java.util.concurrent.*; public class Main { public static 阅读全文
posted @ 2021-02-03 23:05 陈玉林 阅读(173) 评论(0) 推荐(0)
摘要:背景介绍 有时候我们需要执行一批相似的任务,并且要求这些任务能够并行执行。通常,我们的需求会分为两种情况: 并行执行一批任务,等待耗时最长的任务完成之后,再处理所有任务的结果。 并行执行一批任务,依次处理完成的任务结果(哪个任务先执行完就先处理哪个)。 这篇文章要介绍的两种批量执行任务的方式,正好对 阅读全文
posted @ 2021-02-03 13:29 陈玉林 阅读(3839) 评论(0) 推荐(0)
摘要:线程的计算单位 在Java中,线程的计算单位是Runnable或者Callable对象的方法,通过源码可见,Runnable和Callable都是接口,里面只有一个方法声明,线程在执行的时候就是调用Runnable#run()或者Callable#call()。因此在执行并行计算时,需要考虑怎么将计 阅读全文
posted @ 2021-02-03 12:43 陈玉林 阅读(200) 评论(0) 推荐(0)
摘要:线程池基本机制 线程池是一种池化资源,其主要解决重复创建线程带来的额外开销。线程池的设计使用了生产者-消费者模型。向线程池中提交一个计算任务,执行提交动作的线程是生产者,线程池中的线程作为消费者来执行具体的计算。 Executor和ExecutorService Java中Executor是线程池的 阅读全文
posted @ 2021-02-02 19:47 陈玉林 阅读(128) 评论(0) 推荐(0)
摘要:synchronize 机制 synchronize 是 Java 内置的一种基本的同步机制,synchronize 将Java中的对象当做锁,更具体的说法是:Java中对象的组成中,有一部分叫做对象头,对象头中有锁标志位。synchronize 实际上是操作对象头里面的标志位,从而达到加锁和释放锁 阅读全文
posted @ 2021-02-02 12:42 陈玉林 阅读(146) 评论(0) 推荐(0)
摘要:什么是线程安全性? 当多个线程访问一个类时(例如执行对象的方法),这个类始终都能表现出正确、预期内的行为,那么可以称这个类是线程安全的。 什么是原子性? 如果对于某个操作或者某组操作,A线程在执行时,B线程看见A的执行状态为:A没执行或者A已经执行完了。满足这个条件的操作可以称为原子操作。 什么是竞 阅读全文
posted @ 2021-02-01 22:35 陈玉林 阅读(74) 评论(0) 推荐(0)