线程
文章平均质量分 57
记录自己线程学习过程
wuhuhoo
这个作者很懒,什么都没留下…
展开
-
生产者,消费者实现
这种模式满足三点要求: (1)生产者生产数据到缓冲区中,消费者从缓冲区中取数据。 (2)缓冲区满时,生产者线程阻塞,进入等待状态。这期间消费者一旦取走数据,队列未满,就会唤醒阻塞的生产者。 (3)缓冲区空时,消费者线程阻塞,进入等待状态。这期间生产者一旦往队列中放入数据,就会唤醒阻塞的消费者。阻塞队列 public class MyBlockingQueue { private int maxSize; private LinkedList<Integer> queue;原创 2022-04-09 15:39:27 · 101 阅读 · 0 评论 -
ThreadLocal
1.ThreadLocal是什么? ThreadLcoal为解决多线程程序的并发问题提供了一种新的思路。ThreadLocal并不是一个Thread,而是Thread的局部变量,在JDK1.50中ThreadLocal已经支持泛型,该类的类名变为ThreadLocal<T>。API方法也进行了相应调整,新版本的API方法分别是void set(T value), T get(), initialValue()。 1.1ThreadLocal的作用 它通过为每个线程提供一个独立的变量副本解决原创 2022-03-28 21:21:12 · 73 阅读 · 0 评论 -
AQS同步队列
重入锁ReentrantLock的实现底层是使用AbstractQueuedSynchronizer实现的,AbstractQueuedSynchronizer是一个抽象同步类,简称AQS。 AQS提供了一套通用的机制来管理同步状态,阻塞/唤醒线程,管理等待队列等。 AQS是一个FIFO双向队列,内部通过节点head和tail记录队首和队尾的元素,队列元素的类型为Node。Node中的thread变量用来存放进入AQS队列里面的线程;prev记录当前节点的前驱节点,next记录当前节点的后继节点;SHA原创 2022-03-10 18:53:56 · 366 阅读 · 0 评论 -
ReentrantLock
ReentrantLock提供了两个构造器:其中一个构造器可以指定锁的类型,即公平锁和非公平锁,默认构造器默认使用非公平锁。 公平锁:多个线程按照申请锁的顺序,按照先来后到的原则获得锁 非公平锁:多个线程获取锁的顺序并不是按照申请锁的顺序,允许“插队”,有可能出现后申请的线程比先申请的线程优先获得锁的情况 ReentrantLock和synchronized一样都是独占排他锁,所有的线程都是同步互斥的访问同步代码块。同时只能有一个线程获取锁,其他线程只能等待锁被释放后才能有机会获...原创 2022-03-10 16:34:07 · 66 阅读 · 0 评论 -
AQS基本原理
什么是AQS?# AQS即AbstractQueuedSynchronizer,是一个用于构建锁和同步器的框架。它能降低构建锁和同步器的工作量,还可以避免处理多个位置上发生的竞争问题。在基于AQS构建的同步器中,只可能在一个时刻发生阻塞,从而降低上下文切换的开销,并提高吞吐量。 AQS支持独占锁(exclusive)和共享锁(share)两种模式。 独占锁:只能被一个线程获取到(Reentrantlock) 共享锁:可以被多个线程同时获取(CountDownLatch,ReadWriteLock).原创 2022-03-10 12:38:57 · 636 阅读 · 0 评论