一.锁的内存语义 所为的java内存模型的内存语义指的就是在JVM中的实现原则. 锁的内存语义:锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 我们把上面这句话再整理下: 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中. 当线程获取锁时,JMM会把该线程对应的本地内存置为无效.从而使得被监视器保护的临界区代码必须要从主内存中去读取共享变量. 锁的内存语义实现: synchronized.ReentrantLock: 二.volatile内存…
1. 并发编程的挑战 2. 并发编程需要解决的两大问题 3. 线程通信机制 4. 内存模型 5. volatile 6. synchronized 7. CAS 8. 锁的内存语义 9. DCL 双重检查锁定 10. final 11. txt java 内存模型(JMM) 并发编程的挑战 线程上下文切换 定义:CPU通过给每个线程分配CPU时间片来实现多线程机制,使得即使是单核处理器也支持多线程.CPU通过时间片分配算法来循环执行任务,任务从保存到再次加载的过程就是一次上下文切换 多线程不一定…
1. Lock接口 2. 队列同步器AQS 3. 重入锁 ReentrantLock 4. 读写锁 ReentrantReadWriteLock 5. LockSupport工具 6. Condition接口 7. CAS 8. synchronized 9. 锁的内存语义 10. txt 锁 Lock接口 锁是用来控制多个线程访问共享资源的方式.一般来说一个锁可以防止多个线程同时访问共享资源(但有些锁可以允许多个线程访问共享资源,如读写锁). 在Lock接口出现前,java使用synchron…
1. 线程简介 2. 启动和终止线程 3. 对象及变量的并发访问 4. 线程间通信 5. 线程池技术 6. Timer定时器 7. 单例模式 8. SimpleDateFormat 9. txt java并发基础线程 线程简介 什么是多线程? 操作系统调度的最小单元,可以使用 JMX (ThreadMXBean)来查看一个普通的Java程序包含哪些线程 可以使用 jstack 查看运行时的线程信息 为什么要使用多线程? 1. 更多的处理器核心 2. 更快的响应时间 特别是多业务操作更加快速 3.…
1.  java 并发机制的底层原理实现 1.1 volatile 1.2 synchronized 1.3 原子操作 2. java 内存模型(JMM) 3. java并发基础线程 4. java 锁 5. java 并发容器 6. java阻塞队列(7个) 7. java 并发工具(4个) 8. java 原子操作类Atomic(13个) 9. java并发框架(2个)   10. txt java 并发机制的底层原理实现 volatile 特性 volatile可见性:对一个volatil…
1. 基本概念 2. 实现原理 3. ArrayBlockingQueue 4. LinkedBlockingQueue 5. LinkedBlockingDeque 6. PriorityBlockingQueue 7. DelayQueue 8. SynchronousQueue 9. LinkedTransferQueue 10. 小总结 11. txt Java阻塞队列(7个) 基本概念 阻塞队列是一个支持两个附加操作的队列 两个附加操作 支持阻塞的插入方法 当队列满时,队列会阻塞插入元…
1. CountDownLatch 2. CyclicBarrier 3. Semaphore 4. Exchanger 5. txt java 并发工具 通俗理解 CountDownLatch 等ABCD 4个人都结束了,自己才能开始,结束一个减一个 CyclicBarrier 我和A,B,C,D 5个人互相等待,会合了再一起进电影院,到一个减一个 Semaphore 计数器,鸡蛋篮子里只能放5个鸡蛋,缺几个,才能放几个 Exchanger A和B交换数据 CountDownLatch Cou…
1. ConcurrentHashMap 2. ConcurrentLinkedQueue 3. ConcurrentSkipListMap 4. ConcurrentSkipListSet 5. txt java 并发容器 ConcurrentHashMap 并发编程中需要用到线程安全的HashMap 为什么要用 1. 线程不安全的HashMap 数据丢失:put的时候导致的多线程数据不一致 比如有两个线程A和B,首先A希望插入一个key-value对到HashMap中,首先计算记录所要落到的…
Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容. 这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类.当然这些都是并发编程的基本知识,除了使用这些工具以外,Java并发编程中涉及到的技术原理十分丰富.为了更好地把并发知识形成一个体系,也鉴于本人没有能力写出这类文章,于是参考几位并发编程专家的博客和书籍,做一个简单的整理. 一:并发基础和多线程 首先需要学习的就是并发的基础知识,什么是并发,为什么要并发,多线程的概念,线程安全的概念等. 然后学会使用Java中的Threa…
java内存模型说的是多线程,网上可能会有写误导,并不是什么堆.栈.方法区,很多人都会搞混.说白了就是多线程中主线程和本地线程之间的一个数据可见性问题. jmm:java内存模型:jvm:java内存结构 先看看多线程特性: 1.原子性:保证数据一致性和安全性 2.可见性:保证主线程中的共享变量进行修改后,本地线程能第一时间知道,这就是可见性,下面会配图和代码进行说明 3.有序性:jvm的一个重排序,提高线程的运行效率的 下面来看看java内存模型,代码很简单 package com.sprin…