并发编程
文章平均质量分 96
java高并发编程
IUNIQUE
读史使人明智,读诗使人灵秀,数学使人周密,科学使人深刻,伦理学使人庄重,逻辑修辞使人善辩,凡有所学,皆成性格。
展开
-
AQS之ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue阻塞队列特性及源码分析
BlockingQueue——是JUC包提供用于解决并发生产者与消费者问题的类,具有在任意时刻只有一个线程可以进行take或者put方法的特性,即执行take和put方法时阻塞,还提供了超时机制,常用于解耦,在很多的生产与消费场景中可以看见,例如需要在一个系统内实现多任务并发执行,可将任务放入阻塞队列存放,多线程进行消费执行。原创 2022-09-06 21:40:28 · 292 阅读 · 0 评论 -
AQS之Semaphore&CountDownLatch&CyclicBarrier的特性与源码分析
第一节 synchronized关键字详解-偏向锁、轻量级锁、偏向锁、重量级锁、自旋、锁粗化、锁消除第二节 AQS抽象队列同步器原理详解第三节 AQS之ReentrantLock特性和源码分析及CAS和LockSupport的核心原理本节介绍Semaphore、CountDownLatch、CyclicBarrier三大工具类的相关特性与源码分析。PV操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。①S减1;②若S减1后仍大于或等于0,则进程继续原创 2022-07-12 21:22:54 · 228 阅读 · 0 评论 -
AQS之ReentrantLock特性和源码分析及CAS和LockSupport的核心原理
第一节 synchronized关键字详解-偏向锁、轻量级锁、偏向锁、重量级锁、自旋、锁粗化、锁消除第二节 AQS抽象队列同步器原理详解ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized,是一种互斥锁,可以保证线程安全。而且它具有比synchronized更多的特性,比如它支持手动加锁与解锁,支持加锁的公平性。首先synchronized不具备的公平与非公平性,在ReentrantLock内部定义了一个Sync的内部类,原创 2022-07-01 16:54:03 · 269 阅读 · 0 评论 -
AQS抽象队列同步器原理详解
第一节 synchronized关键字详解-偏向锁、轻量级锁、偏向锁、重量级锁、自旋、锁粗化、锁消除Java并发编程——核心在于java.util.concurrent包,而JUC当中的大多数同步器实现都是围绕着共同的基础行为(比如等待队列、条件队列、独占获取、共享获取等),这个行为的抽象就是基于AbstractQueuedSynchronizer简称AQS,AQS定义了一套多线程访问共享资源的同步器框架,是一个依赖状态(state)的同步器。AQS大致有以下五大特性:除了Lock外,JUC当中同步器的实现原创 2022-06-27 20:45:08 · 282 阅读 · 0 评论 -
synchronized关键字详解-偏向锁、轻量级锁、偏向锁、重量级锁、自旋、锁粗化、锁消除
第一节 synchronized关键字详解本节介绍synchronized关键字相关内容,包含其的作用与使用及其底层原理等。在多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。导致的问题:由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问,synchronized则是其中一个同步器,本身也具备与Volatile相同的特性,即可见性,因此这种情况下就可省去volatile修饰变量。synchron原创 2022-06-25 20:56:01 · 286 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier和 Semaphore的用法
并发编程:CountDownLatch、CyclicBarrier和 Semaphore的用法目录CountDownLatch用法CyclicBarrier用法Semaphore用法目录分享一下最近学过的几种并发类的用法.CountDownLatch用法可以利用它实现类似计数器的功能。比如有一个任务A,它要等待其他若干个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来...原创 2019-04-01 13:03:09 · 237 阅读 · 0 评论 -
线程同步基础——wait()、notify()以及notifyAll()的理解
1. wait():会将持有该对象线程的对象控制权交出去,也就是释放对象锁,然后处于等待状态,此时其他线程将有机会获得这个线程的执行权,与sleep的区别在于,sleep是处于休眠状态,将不会释放对象锁,直到休眠时间到了,当前线程执行完毕了,才会由CPU根据线程执行的优先级分配资源,其他线程才有机会抢占资源。2. notify():会通知某个正在等待这个对象的控制权的线程可以继续运行。3. ...原创 2018-11-02 16:28:15 · 196 阅读 · 0 评论 -
线程同步基础——lock接口的使用
/** * 打印工作类 * @author Administrator * */public class Job implements Runnable { private PrintQueue printQueue; public Job(PrintQueue printQueue) { super(); this.printQueue = printQueue; }...原创 2018-11-03 13:49:36 · 168 阅读 · 0 评论 -
线程同步基础——synchronized关键字
synchronized关键字:可用于修饰方法和代码块,我这里用经典的例子——消费者与生产者修饰代码块来实现/** * 生产者 * * @author Administrator * */public class Producer implements Runnable { private int max = 10; private LinkedList<Stri...原创 2018-11-02 16:09:29 · 376 阅读 · 0 评论 -
线程同步基础——Synchronized与Lock的区别(图)
转载 2018-11-03 13:54:26 · 215 阅读 · 0 评论 -
线程同步基础——使用读写锁实现同步数据访问
/** * 缓存器例子 * @author Administrator * */public class CacheDemo { private Map&lt;String, Object&gt; map = new HashMap&lt;&gt;(128); private ReadWriteLock rwl = new ReentrantReadWriteLock(); pu...原创 2018-11-05 15:06:12 · 235 阅读 · 0 评论 -
线程同步基础——守护线程的使用(Daemon Thread)
线程同步基础——守护线程的使用目录Daemon Thread概念代码例子目录守护线程的例子分享Daemon Thread概念守护线程通常执行一些特殊任务,当所有用户线程终止的时候,JVM会简单的丢弃掉所有现存的守护线程.一旦其它非守护线程执行完就会丢弃,不一定所有的守护线程都会执行完才退出,它们可能在非守护线程执行完后的某个时刻就会退出.代码例子此例子模拟了一个子线程守护主线程的场景,...原创 2019-09-11 14:49:58 · 433 阅读 · 0 评论