并发编程
文章平均质量分 64
Java并发编程
风起的年华
这个作者很懒,什么都没留下…
展开
-
懒汉式单例模式的问题和Double Check
单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。 该模式有三个基本要点: 这个类只能有一个实例; 它必须自行创建这个实例; 它必须自行向整个系统提供这个实例。 懒汉式单例模式,使用的时候才创建 但懒汉式单例在多线程情况下会出现一个问题, 就是在多线程情况下会出现单例对象会创建多个实例; /** * 懒汉式单例模式,使用的时候才创建, * 在多线程情况下会出现一个问题, * 就是在多线程情况下会出现单例对象会创建多个实例; */ class Singleton {原创 2021-09-27 15:28:09 · 448 阅读 · 0 评论 -
关于synchronized的三道面试题
1.为什么要使用synchronized 在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。 2.实现原理 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性 3.synchronized的三种应用方式 Ja原创 2021-03-21 20:09:36 · 653 阅读 · 4 评论 -
Java并发编程之Semaphore
Semaphore是什么? Semaphore被称为信号量,Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个线程请求许可,如果没有就等待,而 release() 释放一个线程请求许可。 Semaphore使用原理 尝试获取一个许可,若获取成功,则立即返回true,若获取失败,则立即返回false public boolean tryAcquire() { }; 尝试获取一个许可,若在指定的时间内获取成功,则立即返回true,否则则立即返回false public boolea原创 2020-07-07 10:28:02 · 208 阅读 · 1 评论 -
Java并发编程之CyclicBarrier
CyclicBarrier概念 CyclicBarrier(可循环利用的屏障)是一个同步工具,可以实现让一组线程等待至某个状态之后再全部执行相关操作。 首先,便是可重复利用,说明该类创建的对象可以复用; 其次,屏障则体现了该类的原理:每个线程执行时,都会碰到一个屏障,直到所有线程执行结束,然后屏障便会打开,使所有线程继续往下执行。 另外,CyclicBarrier的两个构造函数:CyclicBarrier(int parties)和CyclicBarrier(int parties, Runnable ba原创 2020-07-07 01:00:56 · 98 阅读 · 0 评论 -
Java并发编程之CountDownLatch
什么是CountDownLatch CountDownLatch是java.util.concurrent包中一个类,其基于线程计数器来实现并发访问控制。 CountDownLatch运行机制 CountDownLatch只要提供的机制是多个(具体数量等于初始化CountDownLatch时count的值)线程都达到了预期状态或者完成了预期工作时触发事件,其他线程可以等待这个事件来触发自己后续的工作。 等待的线程可以是多个,即CountDownLatch可以唤醒多个等待的线程。到达自己预期状态的线程会调用C原创 2020-07-06 23:18:05 · 182 阅读 · 0 评论 -
Java并发编程之CAS解析(一):什么是CAS、乐观锁和悲观锁、CAS机制的使用、CAS和volatile的关系、CAS的特点、ABA问题,ABA问题的解决方法
什么是CAS CAS(Compare And Swap/Compare And Set)是用于多线程同步的原子性指令,CAS主要通过三个值来实现,原始内存的值,给定的预期值,给定更新值,只有当原始内存的值与给定的预期值相等的情况下,才将更新值返回。 CAS的作用:CAS可以将比较和交换转换为原子操作,这个原子操作直接由CPU保证。CAS可以保证共享变量赋值时的原子操作。 乐观锁和悲观锁 悲观锁从悲观的角度出发: 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人原创 2020-06-24 09:09:53 · 409 阅读 · 0 评论 -
线程状态和线程等待唤醒机制解析
1、线程状态 1.1、线程状态划分 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,有几种状态呢?在API中 java.lang.Thread.State 这个枚举中给出了六种线程状态: 这里先列出各个线程状态发生的条件,下面将会对每种状态进行详细解析。 1、Timed Waiting(计时等待) Timed Waiting在API中的描述为:...原创 2020-05-01 01:36:28 · 906 阅读 · 0 评论 -
线程的创建方式和线程安全的实现
1、线程和进程的联系与区别原创 2020-04-30 23:35:47 · 507 阅读 · 0 评论 -
Java线程池的概念及使用
1、什么是线程池? 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅...原创 2020-04-29 00:19:02 · 415 阅读 · 0 评论