多线程
文章平均质量分 88
summerZBH123
这个作者很懒,什么都没留下…
展开
-
synchronized实现方式及锁优化
简述:关于synchronized的具体使用方式,网上已经给出了很多文章,各种不同,主要还是对于锁的对象不同导致,说白了,就是锁一个对象的实例,还是锁一个类,这两个是synchronized在使用时,尤其要关注的。这篇日志主要是记录synchronized其底层实现,以及锁的优化。 synchronized在修饰代码块时,我们编译出来看到就是monitorenter和monito...原创 2018-06-06 12:39:26 · 600 阅读 · 0 评论 -
LockSupport工具使用和源码分析
简述:在前面几篇分析java并发工具的博客当中,基于AQS实现的,底层都会用到LockSupport所提供的park和unpark(Thread)方法来进行线程的挂起和唤醒,所以这篇文章我准备来看下LockSupport到底是如何实现线程挂起和唤醒的,以及它有哪些比较好的功能,可以在以后开发当中使用。我们知道在java当中我们可以使用Object类当中的wait方法和notify方法来实现线程的阻...原创 2018-07-05 16:04:57 · 221 阅读 · 0 评论 -
线程池ThreadPoolExecutor源码分析(二)
简述:在上一篇博客当中介绍了java当中提供的线程池的内容,线程池介绍和常用的线程池分析(一)这篇文章主要是分析下实现线程池的源码ThreadPoolExecutor。以下内容基于JDK1.8关于ThreadPoolExecutor的基本参数我们在上篇文章当中已经介绍过了,现在先来看下ThreadPoolExecutor的继承关系体系我们从上往下看下,每个类或者接口主要是提供了哪些方法...原创 2018-07-05 10:46:33 · 209 阅读 · 0 评论 -
线程池介绍和常用的线程池分析(一)
简述:我们在使用线程的时候,去创建一个线程来执行是非常方便的,如果一个线程的执行时间比较短,而我们又需要创建大量的线程,那么再每次使用时都重新去创建一个线程,显然创建线程和最终使用完线程对线程进行销毁都是非常浪费资源的,因此,java当中就提供了线程池,在一个任务执行结束之后,另外的任务也可以继续使用这个线程进行执行。在了解jdk提供的各种线程池之前,我们先来了解线程池当中基础属性的含义,以及线程...原创 2018-07-04 16:31:56 · 261 阅读 · 2 评论 -
java并发包中Semaphore使用及源码分析
Semaphore是一个线程控制器,初始化时,给定一个线程数量,用来控制同一时刻,只能有指定数量的线程在执行,如果有其他线程,只能等待其中的线程释放掉之后,才可以继续执行。Semaphore的源码分析Semaphore的内部结构是Sync, 分别由NonfairSync 和 FairSync实现,整体来说和ReentrantLock比较类似,不同的是,sync方法当中实现的是AQS中的tryAcq...原创 2018-07-03 17:57:13 · 318 阅读 · 0 评论 -
CountDownLatch使用及源码分析
概念:CountDownLatch是通过一个计数器,记录线程的数量,每个线程在完成自己的任务之后,调用countDown方法,将计数器减一,当计数器的值将为0时,原来等待的线程,即调用countDownLatch.await()方法线程将会被唤起,继续执行。这里有个主线程,调用countDownLatch.await()方法的线程,它会处于挂起状态,直到所有的线程都执行完countDownLatc...原创 2018-07-03 15:29:22 · 1087 阅读 · 3 评论 -
CyclicBarrier使用及源码分析
参考:Java并发之CyclicBarrier原创 2018-07-02 22:47:44 · 360 阅读 · 0 评论 -
ThreadLocal使用方式,源码分析,内存泄漏
ThreadLocal是干什么的? 用来隔离线程之间参数对象的,简单来说就是每个线程在使用的时候,都获取到每个线程上所绑定参数,举个例子,web开发项目当中,每个用户登录进来,访问网站,都会有个新线程创建,我们在每个线程中绑定用户信息,这样就可以在任何时刻获取到当前用户的信息,避免了参数传递。先来看一个简单的例子public class ThreadLocalTest1 { Thre...原创 2018-07-02 17:22:03 · 622 阅读 · 0 评论 -
java中各种锁的对比Synchronized,ReentrantLock, ReentrantReadWritLock,StampedLock
在前面的几篇日志都记录了这些锁的使用方式和部分源码synchronized实现方式及锁优化ReentrantLock实现及AQS简析ReentrantReadWriteLock使用及源码分析StampedLock使用方式ReentrantLock使用对比Synchronized这篇文章主要是介绍在实际开发场景中,我们应该如何选择锁,以及哪种锁它的性能会相对而言比较好一些 ...原创 2018-07-02 14:31:33 · 384 阅读 · 1 评论 -
StampedLock使用方式
简述:在上篇文章中介绍和分析了ReentranReadWriteLock,我们发现是可以将读写分别进行加锁,需要注意的一点就是,当读锁获取到资源的时候,如果要进行写入,不管是否是当前同一个线程都不可以,在开发中我们大部分场景其实都是读多写少,显然,如果要进行写入,需要等待所有的读操作都执行完,显然性能上就会有所降低,因此,在JDK1.8里面提供了StampedLock这个类,他里面提供了一...原创 2018-07-02 11:05:17 · 1530 阅读 · 0 评论 -
ReentrantReadWriteLock使用及源码分析
为什么使用ReentrantReadWriteLock? 在很多场景下我们可以使用synchronized关键字对一个方法或者一段代码进行加锁操作,或者也可以使用ReentrantLock来对某段代码加锁,但是这些锁,如果想要对一个共有资源进行查询操作,也使用以上两种锁,那性能就会有影响,在实际开发环境当中,我们更多的是读的多,写的少,读取数据之间并不需要加锁,而写数据的时候需要同一时刻只能...原创 2018-07-01 14:17:27 · 219 阅读 · 1 评论 -
Thread类当中sleep, join ,yield方法
简述:线程类当中提供了一些辅助方法,以便我们在使用线程时,来完成不同的场景下的操作 sleep()方法 sleep 方法有个重载方法,sleep(long), sleep(long,int ) sleep方法是让出CPU执行权,但是并不会释放到当前线程所拥有的锁对象,这个是和wait方法不同的地方。 Thread.yield方法 y...原创 2018-06-10 22:16:19 · 392 阅读 · 0 评论 -
CAS了解及CAS容易发生的问题
CAS(Compare and Swap)比较和交换,是java在处理并发问题时,使用最多的一种方式,简单说就是,指定一个对象V,给出他的期望值,及需要修改的值,如果期望值等同于内存中的值,那么就把这个对象修改成我们想要改变的值,否则修改失败。CAS使用最佳实践 先看下我们下面的场景:public class Case { public volatile in...原创 2018-06-10 21:05:33 · 5832 阅读 · 0 评论 -
wait(),notify() 和 notifyAll()使用及原理
简述:在上一篇日志中,分析了synchronized关键字,其底层是对对象加锁,通过锁来限制同一时刻只有一个线程来访问同步块,而wait方法是让当前线程失去对锁的拥有权,让出锁,让其他线程进入,又有monitor监视器是属于对象的,那么wait方法及notify也是数据对象的,他们都是对某一个对象的锁的获取和释放。基于以上,可以看出来对于wait方法是建立在锁之上的,notify/noti...原创 2018-06-09 15:10:46 · 5748 阅读 · 0 评论 -
ReentrantLock使用对比Synchronized
简述:这篇文章主要是来了解如何使用ReentrantLock,以及ReentrantLock和Synchronized的对比,基于ReentrantLock的AQS源码的分析在ReentrantLock实现及AQS简析中进行了分析介绍,synchronized实现方式及锁优化 中对synchronized进行了详细的介绍 ReentrantLock是可重入锁,也是独享锁,可重入锁是指:如果当...原创 2018-06-21 22:38:22 · 208 阅读 · 3 评论 -
ReentrantLock实现及AQS简析
简述:reentrantLock是java当中提供的一个锁,他和synchronized关键字有所不同,这篇文章主要是从reentrantLock获取锁,然后释放锁,来分析整个底层源码的实现,并不介绍ReentrantLock的具体使用(基于JDK1.8) ReentrantLock 内部维护了一个Sync类, 这个类的两个有两个实现类,分别是NonfairSync和FairSync ,...原创 2018-06-20 21:59:47 · 1131 阅读 · 1 评论 -
ArrayBlockingQueue源码分析
简述:在jdk concurrent包下面提供了一些同步阻塞队列,这些队列在使用线程池的时候,会把超过核心线程数的任务放在阻塞队列当中,这篇文章主要是来看下ArrayBlockingQueue的源码。ArrayBlockingQueue是一个线程安全的有界队列,它的主要实现方式是Object[]数组,ReentrantLock,及ReenrantLock中的Condition ,如果对Reentr...原创 2018-07-05 18:08:45 · 422 阅读 · 1 评论