一、内存可见性 可见性:一个线程对共享变量值的修改,能够及时地被其他线程看到。 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。 Java内存模型(JMM) Java内存模型…
分类:JUC
JUC学习笔记 -- (2)并发编程的3个概念 ,原子性,可见性,有序性!
并发编程中的三条性质:原子性,可见性,有序性 1.原子性 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。即整体不可分割。 在Java中,对基本数据类型(例外就是long和d…
JUC学习笔记 -- (3)同步容器类和并发容器类
一、同步容器类 包括Vector(实现了一个动态数组,和ArrayList相似,但两者是不同的)和Hashtable。 同步容器类的问题: 例如:Vector的getLast方法,和deleteLast方法,都会执行“先…
JUC学习笔记 -- (4) CountDownLatch闭锁
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现…
JUC学习笔记 -- (5) 线程创建的第三种方式Callable
创建线程的两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到…
JUC学习笔记 -- (6) Lock锁初探
首先我们来回忆一下上一节讲过的synchronized关键字,该关键字用于给代码段或方法加锁,使得某一时刻它修饰的方法或代码段只能被一个线程访问。那么试想,当我们遇到这样的情况:当synchronized修饰的方法或代码…
JUC学习笔记 -- (8) 多线程并发之生产者消费者模式的两种实现
生产者消费者模式是并发、多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据。 真实世界中的生产者消费者模式 生产者和消费者模式在生…
JUC学习笔记 -- (10) 线程池
为什么用线程池 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3>T2,那么是不是说开启一…
JUC学习笔记 -- (11) CyclicBarrier介绍及其与CountDownLatch的区别
CyclicBarrier是多线程中一个常用的辅助类,主要用于线程组内部之间的线程的相互等待问题。 CyclicBarrier根据英文拆分翻译可翻译为:可循环利用的屏障。顾名思义,首先,便是可重复利用,说明该…
JUC学习笔记 -- (12) Semaphore的用法
在并发编程中,Semaphore也是常用的一个辅助类。 Semaphore翻译成字面意思为 信号量,Semaphore可以控制同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release…
使用JUC并发工具包的Lock和Condition,实现生产者和消费者问题中的有界缓存
JDK5.0之前,用java实现生产者和消费者的唯一方式就是使用synchronized内置锁和wait/notify条件通知机制。JDK5.0之后提供了显示锁Lock和条件队列Condition,与内置锁和内置条件队列…
JUC线程框架深度解析 — 01、JUC基础使用
JUC线程框架深度解析 — 01、JUC基础使用JUC线程框架深度解析 — 02、线程同步锁JUC线程框架深度解析 — 03、线程同步辅助工具类JUC线程框架深度解析 — 04、并发集合支持类JUC线程框架深度解析 — …