多线程
Michael_Chou_Rider
点滴积累
展开
-
ThreadPoolExecutor原理和使用
一.ThreadRoolExecutor简介 1.ThreadRoolExecutor的继承关系如下图: 2.ThreadRoolExecutor里面的属性和方法,还有内部类: 二.分析ThreadRoolExecutor执行流程及原理 1.首先我们来分析的他的构造函数: Executor executor = new ThreadPoolExecutor(10, 10, 1000L, Ti...原创 2019-10-24 10:45:10 · 850 阅读 · 0 评论 -
ThreadLocal浅析
一.ThreadLocal简介 1.ThreadLocal是用来存储线程级别的变量的,他的目的是降低同一个变量在同一个线程里面来回切换造成的开销。他存储的变量是绝对的线程安全的,一般我们在实在的应用中用在回话session里面比较多:代码如下 private static final ThreadLocal threadSession = new ThreadLocal(); public sta...原创 2019-10-15 12:03:02 · 133 阅读 · 0 评论 -
ReentrantLock原理浅析
一.简单概括 1.1Java.util.concurrent juc包里面的类实现的核心是AQS(AbstractQueueSynchronizer)抽象队列同步器,要分析ReentrantLock的实现的原理,离不开分析AQS和AQS与ReentrantLock之间的关系 二.分析AQS(AbstractQueueSynchronizer) 2.1:AQS(AbstractQueueSynchr...原创 2019-10-09 17:22:21 · 212 阅读 · 0 评论 -
多线程的认识(五)
一.线程之间的通信方式 1.概念:线程之间通信的主要的方式是共享内存,但是共享内存需要有几个关注的点 (1)数据的可见性(2)有序性(3)原子性,可以通过JMM,Java内存模型来和volatile或者synchronized来解决。 2.共享数据: 1.可以将共享的数据独立在一个类里面,在这个类里面提供数据的同步操作方法 2.可以把共享数据作为一个类的成员变量,而把Runable作为这个类里面的...原创 2019-09-21 17:16:10 · 131 阅读 · 0 评论 -
多线程的认识(四)
一.Java阻塞队列 1.Java阻塞队列的原理:分为两种 (1)当队列为空的时候,消费者端会被阻塞 (2)当队列满了的时候,生产者端的队列会被阻塞。 2.介绍一个常遇到的Java的阻塞队列 1.ArrayBlockingQueue:数组阻塞队列,他的数据结构数组的有界的阻塞队列,遵循FIFO先进先出的原则,但是他是非公平的,无论是在生产者端,还是消费者端,他都是最先挂起的,最先去获取数据。 2....原创 2019-09-20 22:53:31 · 277 阅读 · 0 评论 -
多线程的认识(三)
一.线程上下文切换 (1)概念:任务在CPU上执行都有一定的时间片,当任务的时间片结束时,该任务就会被挂起,执行下一个任务,这个过程中任务状态信息的保存和加载称为上下文的切换。 (2)什么是上下文:上下文是指记录着线程状态的CPU寄存器信息和程序计数器的状态信息 CPU寄存器:CPU的高速的内存空间。 程序计数器:记录线程的内存地址和执行到那一行的内存空间。 (3)PCB切换帧:上下文切换可以被认...原创 2019-09-19 22:18:49 · 122 阅读 · 0 评论 -
多线程锁的认识(二)
一.ReadWrite读写锁 为了提高性能,Java提供了在读的地方使用读锁,写的地方使用写锁,读读不阻塞,读写阻塞,写写阻塞,这是由 jvm 自己控制的,你只要上好相应的锁即可。 二.独占锁和共享锁 独占锁:独占锁就是同一时刻只能有一个线程持有这个锁资源,ReentrantLock 就是以独占方式实现的互斥锁。独占锁他是一个悲观策略的锁,就算是读读,一个读线程持有锁资源,另外的一个线程也是需要等...原创 2019-09-18 22:44:02 · 123 阅读 · 0 评论 -
多线程简单的认识锁
一.ReentrantLock ReentrantLock它继承实现了lock的接口,他是一个可重入锁,他完全的实现了synchronized的功能,同时他还添加了中断锁,轮询锁,定时锁等各种的锁来避免发生线程不安全。 (2)简单的介绍一下各种的方法: lock():会去获取锁资源,获取到会返回true,获取不到则会将线程禁闭,直到线程获取到资源为止。 trylock():尝试去获取锁资源,获取到...原创 2019-09-17 22:14:46 · 125 阅读 · 0 评论 -
深入了解Synchronized同步锁
一.简介 Java并发编程这个领域中synchronized关键字一直都是元老级的角色,很久之前很多人都会称它为“重量级锁”。但是,在JavaSE 1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后变得在某些情况下并不是那么重了。synchronized可以把任何的非空对象当做锁,他属于独占式悲观锁,也属于可重入锁。 二.使用的地方 (1)使用...原创 2019-09-16 22:34:41 · 158 阅读 · 0 评论 -
关于乐观锁、悲观锁,自旋锁的总结
一.乐观锁 乐观锁是一种乐观的思想: (1)他认为是一种读多写少的情况 (2)他认为并发量不是很大 (3)所以他在每次读取数据的时候都不上锁 (4)在他写数据的时候,他遵循读-比较-写的过程,比较是很上一个版本号的数据进行比较,只有比较结果相同的时候,他才会进行数据的更新。 (5)在Java里面,乐观锁通常是通过CAS实现的,CAS是一个比较写值与当前值的,当写入值与当前值相等的时候才会进行数据写...原创 2019-09-16 21:54:20 · 471 阅读 · 0 评论