随笔分类 - 多线程
摘要:Phaser是jdk1.7引入的同步工具类,与countdownlatch和cyclicbarrier 功能重叠,但是又覆盖他们的功能。 package com.alibaba.dubbo.common.test; import java.util.concurrent.*; /** * @auth
阅读全文
摘要:CyclicBarrier是java提供的同步辅助类。一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point),才得以继续执行。阻塞子线程,当阻塞数量到达定义的参与线程数后,才可继续向下执行。 public class BarrierMain {
阅读全文
摘要:semaphore:信号量,又称许可管理器,来控制线程的并发数量。 例如: 1、主线程设置许可数为2,标识最大允许并发线程数为2,前边的线程释放许可后,阻塞的线程才可以继续获取许可。信号量可以设置公平和非公平,当前设置为非公平 public static void main(String[] arg
阅读全文
摘要:CAS是一种常用的硬件同步原语,即由一组计算机硬件提供的原子操作。 CAS的逻辑: 有三个参数:p-要改变变量的指针;old-旧值;new-新值。执行时先比较p和old值是不是相等,如果相等,就把new赋值给p,并返回true.否则不改变,返回false。 java在1.5之后引入CAS,主要放在J
阅读全文
摘要:CountDownLatch是用来解决线程之间通信的。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后
阅读全文
摘要:死锁定义为一组互相竞争资源的线程因互相等待,导致永久阻塞的情况。 即; 如何解决死锁: 1、一次性申请所有的资源,直到拿到所有资源的锁再进行操作 2、主动释放其所占有的资源,synchronized是做不到的,使用lock 3、按资源id的从小到大的顺序去申请锁
阅读全文
摘要:Q:为何要采用异步编程 A:异步编程首先不会节约线程,因为异步操作都会重新开一个线程。异步编程是提高了CPU的使用率,采用同步编程的方式,整个服务器的所有线程大部分都没有在工作,而是在等待。因为线程同步操作 要等整个事件处理完成才能提交,所以CPU的利用率很低;当采用异步编程,线程不需要等待,减少时
阅读全文
摘要:java线程池 1、以下是ThreadPoolExecutor参数完备构造方法: public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueu
阅读全文
摘要:1、锁升级的过程 当多个线程同时竞争一个对象监视器时:当前对象结构中的mark word中是否是当前线程id,如果是则当前线程获得偏向锁。 如果不是,则通过CAS将当前线程id置换到mark word中,如果成功则获得偏向锁,如果不成功则说明有竞争,升级为轻量级锁。 后续再通过CAS将线程的指针放到
阅读全文
摘要:1、为什么要引入java内存模型 java是支持多线程的,但是其可见性,原子性,有序性是导致多线程bug的原因,所以引入java内存模型来解决这些问题。 2、什么是java内存模型 java内存模型概括来说是解决可见性和有序性的。 1)可见性 - 缓存导致 当创建线程时JVM会为其创建自己的内存存储
阅读全文

浙公网安备 33010602011771号