随笔分类 - 多线程
摘要:在集合框架里,想必都用过ArrayList和LinkedList,ArrayList和ArrayBlockingQueue一样,内部基于数组来存放元素,而LinkedBlockingQueue则和LinkedList一样,内部基于链表来存放元素。 队列常见的出队和入队方法 [ArrayBlockin
阅读全文
摘要:Semaphore(信号灯):一个计数信号量。顾名思义,一个信号量拥有一定数量的许可证,一个线程acquire需要申请到许可证才能获取锁,否则阻塞等待;释放的时候会返还许可证给阻塞的线程申请,常用于限制可以访问某些资源(物理或逻辑的)线程数目,限流场景等。 通过测试代码,看一下Semaphore的基
阅读全文
摘要:CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能。 写个测试Demo 结果: Demo中的主线程(main方法)为什么会
阅读全文
摘要:AQS,全称 AbstractQueuedSynchronizer,是JUC框架中最重要的类,是J.U.C 中绝大部分的工具类的基础,也是必经之路。 使用层面上AQS有两大功能实现:独占和共享 独占锁,每次只能有一个线程持有锁,比如ReentrantLock就是以独占方式实现的互斥锁 。 共享锁 ,
阅读全文
摘要:多线程中 synchronized 一直是元老级角色,很多人都会称呼它为重量级锁。但是随着 Java SE 1.6 对synchronized 进行了各种优化之后,有些情况下它就并不那么重,Java SE 1.6 中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁。 Mark word
阅读全文
摘要:JDK1.8的实现已经摒弃了JDK1.7Segment的概念,而是直接用Node数组+链表+红黑树的数据结构来实现,并发控制使用Synchronized和CAS来操作,整个看起来就像是优化过且线程安全的HashMap,虽然在JDK1.8中还能看到Segment的数据结构,但是已经简化了属性,只是为了
阅读全文
摘要:从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。 原理如图 写一个测试Demo:计算出1到30的和 结果: 开始->0ForkJoinPool-1-worker-1num的总数:0 num
阅读全文
摘要:通常我们构建线程池一般使用这种方式 ExecutorService executorService = Executors.newFixedThreadPool(4);//固定线程池 ctl是什么?它贯穿了整个线程池 addworker方法就是增加工作线程 如果addworker过程中失败了,执行a
阅读全文
摘要:2.Condition源码分析 lock.newCondition() 实际返回ConditionObject signal 方法 大致流程如下:图解
阅读全文
摘要:在Java多线程中,可以使用 synchronized 关键字来实现线程之间同步互斥,但在JDK1.5中新增加了 ReentrantLock 类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定、多路分支通知等功能,而且在使用上也比 synchronized 更加的灵活。 根据下面代码
阅读全文
摘要:线程概念:现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(LightWeight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能
阅读全文

浙公网安备 33010602011771号