
Java并发
suye233
穷变
展开
-
Java并发——Thread类源码解析、线程初探
线程相较于进程,它是轻量级的,并且一个进程可以包含多个线程,这多个线程之间共享该进程的资源,且每个线程自己独占一份内存,这个空间叫做线程栈,是由系统创建该线程时创建的,主要是保存线程中的自定义的数据等。注意的是,线程依托于进程,当该进程消亡时,进程内所有的线程也会跟着消亡。而Java中的线程是抢占式的原创 2018-11-27 22:49:24 · 361 阅读 · 0 评论 -
一起来写线程池(一)——实现基础线程池
线程池的原理其实很简单,就是不把执行完任务的线程关闭,而是从任务队列中拿到新的任务,接着执行。下面带着大家仿照JDK1.8线程池的思路来写一个简单的线程池原创 2019-04-03 13:13:38 · 764 阅读 · 0 评论 -
Java并发容器——ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListMap类的总结
ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListMap类的总结原创 2018-12-18 22:28:50 · 703 阅读 · 0 评论 -
Java并发容器——阻塞队列源码分析、生产者消费者模式、CopyOnWriteArrayList、ConcurrentLinkedQueue类总结
Java在jdk1.6引入了并发容器阻塞队列,阻塞队列是一个统称,凡是实现了BlockingQueue接口的容器都可以称的上阻塞队列,它实现了生产者-消费者模式,在阻塞队列中出队列与入队列都有两种形式,阻塞的put与take方法以及定时获取的offer与poll方法原创 2018-12-18 17:42:30 · 736 阅读 · 0 评论 -
Java并发——LockSupport、Condition源码解析
LockSupport类是一个工具类,用来在显示锁里面替换Object类的wait、notify方法的。Condition在Java中是用于多线程协调通信的工具类,一般用于显示锁。在内置锁里面,wait方法必须在线程持有锁的时候才能对线程进行阻塞,但是LockSupport类却不一样,即使线程没有持有锁,它也能将该线程阻塞。原创 2018-12-11 17:58:39 · 234 阅读 · 0 评论 -
Java并发——线程池ThreadPoolExecutor类源码解析
线程池作为减少线程创建关闭开销的常用手段,一直被使用着,ThreadPoolExecutor类则是Java中内置的线程池中的一种原创 2018-12-17 11:42:22 · 740 阅读 · 0 评论 -
Java并发——AQS框架源码详解
谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)。类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch等等。转载 2018-12-10 21:46:41 · 246 阅读 · 0 评论 -
Java并发——FutureTask类源码解析
在线程执行的run方法是一个void方法,它是不返回任何结果与状态的,但是FutureTask可以用来在线程执行任务后,返回任务的结果。FutureTask类实现了Future接口的语义,利用Callable,即自定义任务来完成这一功能。原创 2018-12-15 17:05:00 · 490 阅读 · 0 评论 -
Java并发——循环栅栏CyclicBarrier源码解析
从CyclicBarrier类的名字来看,它是循环栅栏,是栅栏机制的一种实现,它在内部利用ReentrantLock锁以及Condition的线程协调机制来实现这一功能。原创 2018-12-14 21:32:31 · 598 阅读 · 0 评论 -
Java并发——CAS原子操作、java.util.concurrent.atomic原子变量类源码解析
比较并交换(compare and swap, CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。原创 2018-12-09 16:16:02 · 285 阅读 · 0 评论 -
Java并发——volatile关键字、有序性浅谈
volatile关键字是一种比锁机制稍弱点的同步机制,volatile变量会被编译器以及JVM运行时注意到是一个共享变量,被它修饰的变量具有两大特征:第一,保证了不同线程对该变量的可见性。被它修饰的变量在线程中被修改后会立马写入主存中,在Java内存模型中,volatile变量的写入操作与读取操作同时到达的时候,将先进行写入操作,来保证数据的一致性。原创 2018-12-06 21:18:04 · 275 阅读 · 0 评论 -
Java并发——闭锁CountDownLatch、信号量Semaphore类源码解析
CountDownLatch类是AQS框架闭锁机制的一种实现。Semaphore是AQS框架信号量机制的一种实现。它首先在创建时会定义一定的资源量,每个线程如果能从Semaphore里得到足够的资源,那么该线程就会得到执行,而如果得不到足够的资源,那么AQS会把线程置于同步队列中,来等待前面获得资源的线程执行完毕释放资源原创 2018-12-13 16:04:24 · 468 阅读 · 0 评论 -
Java并发——synchronized关键字,内置锁解析,可见性,互斥性浅谈
Java中为了保证每个线程中的原子操作,引入了内置锁,或者称为监视器锁,其中,每个Java对象都可以作为一个实现锁的对象,synchronized关键字修饰的代码块被称为同步代码块,线程进入同步代码块自动获取内置锁,退出同步代码块则释放锁,不需要调用者考虑它的创建以及消除,但是得十分熟悉内置锁的机制。原创 2018-12-06 12:18:31 · 675 阅读 · 0 评论 -
Java并发——ReentrantLock可重入锁、ReentrantReadWriteLock读写锁源码解析
ReentrantLock类是Java并发包里可重入锁的实现,同时它的大部分功能交由同步器AQS框架完成,它是AQS独占锁的实现。 ReentrantReadWriteLock中文名字叫做可重入读写锁,其内部含有两种锁,一种是读锁,另外一种是写锁。它规定了最多原创 2018-12-12 17:50:13 · 1088 阅读 · 0 评论 -
Java并发——ThreadLocal、ThreadGroup类源码解析
即线程范围之间如何实现数据的共享。其实很简单,利用一个Map来存贮,键存贮线程的名字、id等数据,而值则存贮着该线程对应共享的数据,将该Map传进对应的线程就可以实现数据的共享了,但是得注意同步。防止出现"脏数据"。而ThreadLocal类的存贮策略与上述相似,但是它只保存着每个线程的对应的本地数据,一个线程并不能访问ThreadLocal里另外一个线程保存的数据。说了这么多,还没正式的介绍ThreadLocal类,中文名是本地线程类,原创 2018-11-28 20:51:20 · 402 阅读 · 0 评论 -
一起来写线程池(二)——实现拥有定时任务、周期任务线程池
ScheduledExecutor线程池在基础线程池上实现了定时任务、周期任务以及定时周期任务,其关键是在普通的任务队列上扩展实现延迟任务队列。下面来带大家一起来实现拥有定时、周期功能的线程池原创 2019-04-03 15:29:40 · 1632 阅读 · 3 评论