
并发编程
点不点外卖
这个作者很懒,什么都没留下…
展开
-
【并发编程】ReentrantLock
ReentrantLock是什么 ReentrantLock继承自AbstractQueuedSynchronizer,即AQS, AQS可以理解为一个线程排队获取CPU的队列。队列中放的是一个个的Node。 * +------+ prev +-----+ +-----+ * head | | <---- | | <---- | | tail * +------+原创 2020-10-27 17:44:14 · 165 阅读 · 1 评论 -
【并发编程】线程是如何被创建的?
从Java的角度来讲,创建一个线程很简单,Thread t = new Thread(),但是Java中的一个线程同时也会对应一个操作系统级别的线程,这个过程是如何实现的呢? 首先,创建一个Java层面的线程,new Thread并调用start()方法。 调用native的start0()方法,调用JVM的JVM_StartThread进行线程创建和启动。 new JavaThread(&thread_entry, sz)创建操作系统级别的线程,根据不同操作系统执行对应的os::create_t原创 2020-10-23 10:00:40 · 221 阅读 · 0 评论 -
【并发编程】Synchronized
Synchronized是什么? synchronized是用来实现同步代码块的关键字,通过C++代码实现,在JDK1.6以前synchronized通过mutex互斥量实现,涉及用户态和内核态的切换,效率低下,直接就是重量级锁。而JUC包下的Lock通过AQS实现对共享资源的同步控制,效率相对synchronized要高,因此1.6以后对synchronized进行了优化,避免直接使用系统函数加锁。 偏向锁、轻量锁、重量锁 偏向锁:同一个线程多次访问共享资源,在加锁之前检查对象头中的线程ID,如果是当前原创 2020-10-22 16:40:41 · 119 阅读 · 0 评论 -
多线程的几种常见状态切换
New --> Runnable --> Blocked New --> Runnable --> Waiting New --> Runnable --> Timed Waiting New --> Runnable --> Terminated原创 2019-12-04 11:21:40 · 308 阅读 · 0 评论 -
volatile关键字工作原理图
volatile关键字工作原理图 正在深入学习并发编程的道路上,有错误的地方望指正。原创 2019-11-29 17:40:57 · 148 阅读 · 0 评论