多线程
文章平均质量分 64
莫失莫忘hh
保持学习,保持充实
展开
-
CyclicBarrier
一、介绍 CyclicBarrier线程同步屏障,他的使用场景是,等一组线程到达屏障后,然后再同时放行。 二、使用案例 @Slf4j public class CylicBarrierExample { private final static CyclicBarrier CYLIC_BARRIER = new CyclicBarrier(5); public static void main(String[] args) throws Exception { for (原创 2022-03-19 15:48:04 · 206 阅读 · 0 评论 -
CountDownLatch
一、介绍 CountDownLatch是一个并发工具类,它的作用是可以完成线程的协作,通常的场景是 主线程等待 多个子线程执行完成后再处理,类似于Jion功能。 二、使用方法 public static void main(String[] args) throws Exception { // 设置挡板数量 final CountDownLatch latch = new CountDownLatch(10); for (int i = 0; i &l原创 2022-03-18 19:48:47 · 369 阅读 · 0 评论 -
Condition等待通知
一、介绍 condition接口提供了类似Object的监视器的方法,用来实现等待通知模式。但是与Object监视器又有一定的区别,与不同。主要体现在; 等待队列 Obejct模式 :一个 Condition:多个 等待超时模式 Object模式:不支持 Condition模式:支持 二、使用方法 // 声明锁的对象 ReentrantLock lock = new ReentrantLock(); // 获取监视器 Condition condition = lock.newConditi原创 2022-03-10 19:38:57 · 236 阅读 · 0 评论 -
AbstractQueuedSynchronizer并发同步器
一、介绍 队列同步器AbstractQueuedSynchronizer,是用来构建锁或其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源线程行排队工作。 同步器的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态。这时就需要同步器提供3个方法(getState(), setState(int newState), compareAndSetState(int expect, int update) )。因为它们能保证状态的改变是安全的。 相原创 2022-03-06 16:36:00 · 297 阅读 · 0 评论 -
ThreadLocal分析
问题:? Java的引用类型有哪几种? 每种引用类型的特点是什么? 每种引用类型的应用场景是什么? Threadlocal应用场景? ThreadLocal会产生内存泄漏? 一、ThreadLocal用来干什么? 目的为不同的线程创建一个变量副本;在多线程环境下可以访问对应的副本,也就是变量在不同的线程中是相互隔离的,是线程独享的 二、引用的分类 空间不够时,软引用指向的对象,在空间不够时会被回收,适合缓存; 弱引用遭遇到GC就会被回收 **虚引用的作用:**主要用来管理堆外内存。例如:当虚引用被回原创 2021-08-07 22:44:01 · 115 阅读 · 0 评论 -
并发编程学习笔记<三>
前言 本文介绍java的内存模型 java并发编程中,需要处理两个关键的问题:线程间的同步和通信 一、什么是Java内存模型(JMM) 在Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽各个硬件平台和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。那么Java内存模型规定了哪些东西呢,它定义了程序中变量的访问规则,往大一点说是定义了程序执行的次序。(其实也就是在多线程情况下,对于共享可变变量,线程是如何通信的)原创 2021-05-07 22:59:14 · 65 阅读 · 0 评论 -
并发编程学习笔记<二>
前言 本文主要内容关键字 Volatile Synchrozied 一、关键字 Volatile 可见性:当一个线程修改一个共享变量时,另外一个变量能够读到这个修改的值。 内存屏障: 是一组处理器指令,用于实现对内存操作的顺序限制。 存在的问题: a ++ 问题 非原子的64位操作(Long 和 Double 会将读或者写入分解成 32位的 两次操作) 如果一个字段被声明成了volatile ,java线程的内存模型确保所有线程看到这个变量的值是一致的。(它比synchronized的使用成本原创 2021-04-13 17:14:13 · 72 阅读 · 0 评论 -
并发编程学习笔记<一>
多线程基础概念,知识点 进程:资源分配的最小单位,线程:调度执行的最小单位 一、为什么使用多线程?多线程久一定快嘛?它会带来其他什么问题 资源利用率:某些情况下,程序必须等待外部操作执行完,才能继续操作,此时其实可以利用多线程干其他事情。 公平性:不同的用户和程序对于计算机上的资源有着同等的使用权。 便利性:在计算多个任务时,应该编写多个程序,这样处理起来更加便利。 不一定更快;多线程带来的问题: 1.上下文的切换:CPU通过每个现场分配CPU时间片来实现这个机制。不同的时间片非常短,所以不同.原创 2021-04-13 17:13:50 · 101 阅读 · 0 评论 -
Thread线程中断interrupt
目录一、线程中断二、中断方法2.1 `interrupt()`2.2 `isInterrupted()`判断目标线程的中断状态2.3 `interrupted()`清除当前中断状态,并且返回之前断值3、小结 一、线程中断 当我们启动一个任务或者一个线程之后,有时候时候需要任务结束之前,取消任务。像用户点击某个功能按钮后,点取消操作。但是Java中没有提供安全的中断机制,(如:Thread.stop其实是并不推荐的)。但是Java中有一种叫 中断的协作机制,可以使得一个线程中断另外一个线程的工作。 其实也就原创 2020-08-15 19:29:34 · 736 阅读 · 0 评论 -
线程饥饿死锁
文章目录一、什么是死锁:1.2 死锁的四个必要条件二、线程解饿死锁三、小结 目录 一、什么是死锁: 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 1.2 死锁的四个必要条件 1⃣️:请求和保持请求:当进程因请求资源而阻塞时,对已获得的资源保持不放 2⃣️:不可剥夺:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。 3⃣️:循环等待:在发生死锁时,必然存在一个进程–资源的环形链。 4⃣️:互斥条件:进程要原创 2020-08-02 11:23:56 · 543 阅读 · 0 评论