
多线程
G0o0o0o
这个作者很懒,什么都没留下…
展开
-
Lock底层原理—ReentrantLock、AQS、Condition
Lock底层原理—ReentrantLock、AQS、Condition文章目录Lock底层原理—ReentrantLock、AQS、Condition1. Lock2. ReentrantLock公平锁和非公平锁SyncNonfairSyncNodeFairSync3. AQS—AbstractQueuedSynchronizerMyLock4. ConditionConditionObject.awaitConditionObject.signal5. 同步队列与等待队列参考:先来看看J.U.C包下原创 2020-06-04 23:39:54 · 777 阅读 · 3 评论 -
synchronized底层原理—Monitor监视器
深入了解sychronized文章目录深入了解sychronized1. 作用2. 底层实现原理1. Monitor类2. 管程3. ObjectMonitor4. _WaitSet5. _EntryList6. ObjectWaiter3. 对象头1. 轻量级锁2. 重量级锁4. 总结参考sychronized——java多线程锁的关键字1. 作用多线程情况下,同步代码的互斥访问有效的解决了共享变量的可见性问题解决了指令重排序的问题2. 底层实现原理小插曲:用idea插件jclassl原创 2020-05-31 07:52:31 · 3518 阅读 · 1 评论 -
小白分析一波ConcurrentHashMap
ConcurrentHashMap 1.8源码分析目录ConcurrentHashMap 1.8源码分析1. Overview2. 历史演变3.属性4. Node类1. Node2. TreeBin3. TreeNode4. ForwardingNode5. 插入操作——putVal6. 初始化table——sizeCtl7. 获取Map大小——size和mappingCount8. size+...原创 2020-03-23 10:28:47 · 522 阅读 · 0 评论 -
Java并发编程的艺术笔记(十)
10. Executor框架Executor框架大致分为三部分:任务:Runnable、Callable这两个接口任务执行:核心接口Executor、继承于Executor的ExecutorService、两个实现ExecutorService接口的实现类(ThreadPoolExecutor和ScheduledThreadPoolExecutor)异步计算的结果:Future接口、Fu...原创 2020-03-09 13:26:28 · 166 阅读 · 0 评论 -
Java并发编程的艺术笔记(九)
9. Java中的线程池1. 线程池实现原理线程池的优点:减低资源消耗提高响应效率提高线程的可管理性ThreadPoolExecutor执行execute()示意图ThreadPoolExecutor执行图参考:《Java并发编程的艺术》ThreadPoolExecutor的构造方法//corePoolSize 核心线程数——核心线程不会被回收,没任务时会保持空闲状态...原创 2020-03-09 13:23:52 · 153 阅读 · 0 评论 -
Java并发编程的艺术笔记(八)
8. Java中的并发工具类提供并发流程控制CyclicBarrierCountDownLatchSemaphore线程间交换数据Exchanger1. CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作,类似于一个计数器。构造参数会传入一个N值,当调用CountDownLatch的countDown方法,N就会-1,await方...原创 2020-03-07 19:20:53 · 135 阅读 · 0 评论 -
Java并发编程的艺术笔记(七)
7. 原子操作类Atomic原子类基本上都是Unsafe实现的包装类。操作原子类是线程安全、性能高效的更新变量的方式。原子更新基本数据类型:AtomicInteger 整型AtomicLong 长整型AtomicBoolean 布尔型Unsafe只提供三种CAS方法,compareAndSwapObject、compareAndSwapInt、compareAndSwap...原创 2020-03-07 19:19:28 · 195 阅读 · 0 评论 -
Java并发编程的艺术笔记(六)
6. Java并发容器和框架1. ConcurrentHashMap高效的线程安全的hash表,HashTable实现的是表锁,而concurrentHashMap实现的是分段所,意味着同一时间可以有多个线程操作Hash表,提高了效率。Segment继承了Lock,是分段式锁,一个Segment包含一个HashEntry数组,每个HashEntry是一个链表结构的元素,一个Segment守...原创 2020-03-07 19:18:21 · 140 阅读 · 0 评论 -
Java并发编程的艺术笔记(五)
5. java中的锁1. Lock接口Lock接口是在Java SE 5 出现的,Lock接口比Synchronized更为灵活,增加了中断、超时等功能。但是失去了synchronized隐式解锁的方便性,需要手动解锁,因此Lock更容易造成死锁条件。Lock扩展性更强、synchronized更为便捷。Lock依赖于底层的同步器实现,也就是前文说到的AQS。2. 队列同步器A...原创 2020-03-07 19:10:08 · 230 阅读 · 0 评论 -
Java并发编程的艺术笔记(四)
4. java并发编程基础1. 进程和线程什么是进程:进程是一个具有独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和任务调度的一个独立单位,是应用程序运行的载体。进程具有四种特性:动态性、并发型、独立性、结构性。什么是线程:线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程...原创 2020-03-07 19:04:32 · 164 阅读 · 0 评论 -
Java并发编程的艺术笔记(三)
3. Java内存模型1. Java内存模型基础1. 并发编程两个关键性问题线程之间如何通信:通信是指线程之间如何交换数据。通信机制有两种:共享内存和消息传递。修改共享内存的是隐式通信,而消息传递没有公共状态,为显示传递。线程之间如何同步:通信和同步是相同的。2. Java内存模型抽象结构Java内存模型要结合JVM来看,线程共享的是堆内存和方法区,私有的是程序计数器,虚...原创 2020-02-27 11:16:49 · 173 阅读 · 0 评论 -
Java并发编程的艺术笔记(二)
Java并发机制的底层实现原理1. volatile volatile相当于轻量级的synchronized,作用是保证数据的可见性,简单来说就是保证数据的一致性(使其他线程所缓存的volatile修饰字段的值失效,因此也会浪费其他线程的一些时间)。如果使用得当,会比synchronized的执行成本更低。volatile修饰的变量就是告知系统,任何对此变量的操作都需要从共享内存中获取...原创 2020-02-25 13:12:20 · 130 阅读 · 0 评论 -
Java并发编程的艺术笔记(一)
1. 并发编程多线程加速程序运行所面临的问题:上下文切换、死锁、硬件和软件的限制。1. 上下文切换CPU按照分配给各个程序的时间片来执行程序或者切换线程执行。多线程不一定更快,并发执行的累加操作在不是大数据量的情况下会比串行的慢。上下文切换势必会带来时间上的开销,解决的方法有:并发编程、CAS算法、使用最少线程、使用协程。2. 死锁死锁产生:循环且等待、互斥、占有且...原创 2020-02-23 23:13:35 · 210 阅读 · 0 评论 -
四种线程池的创建
线程池可以大大减少线程创建、销毁所带来的资源浪费。它可以对线程进行管理和复用。1原创 2019-11-17 10:46:30 · 488 阅读 · 0 评论 -
多线程笔记--生产者与消费者
消费者import java.util.Queue;public class Customer implements Runnable { /** * 数据队列 */ private Queue<String> queue ; public Customer(Queue<String> queue) { ...原创 2019-12-21 23:48:49 · 97 阅读 · 0 评论 -
多线程笔记--socket
Client端import java.io.*;import java.net.Socket;public class ClientDemo1 { public static void main(String[] args) { try { //向指定的IP的端口号发送远程连接 Socket socket = new S...原创 2019-12-21 21:35:30 · 143 阅读 · 0 评论