java多线程
文章平均质量分 70
梧桐和风
学如逆水行舟,不进则退。要知道,比你聪明的人比你还努力。
展开
-
一文深入分析AQS(原理篇)
之前写过AQS的文章 AbstractQueuedSynchronizer整体解析),当时只是简单介绍了下,没有涉及源码分析和实现细节,但这毕竟是java同步中最重要的类,于是重写了部分内容,添加了源码分析和其他细节。 本文分成两个部分,第一部分从整体上分析AQS的实现机制和原理,第二部分深入源码探究。好了,那就开始吧 整体介绍 从AQS类的注释中,我们可以了解到:该类是一个用于构建锁或其他同步器的基础框架,使用一个int的成员变量表示同步状态。另外,还有一个内置的先进先出的队列可储存竞争同步状态时排队的线原创 2021-06-09 14:44:35 · 909 阅读 · 0 评论 -
Thread的join()方法解析
一般用join方法实现主线程等待其他异步线程完成,今天就看看它到底是咋实现的。 先看下示例 // 子线程 static class SleepThread implements Runnable { @Override public void run() { try { System.out.println("子线程开始"); Thread.sleep(1000);原创 2021-06-08 12:45:40 · 414 阅读 · 0 评论 -
java的内存模型与volatile关键字详解
由于各种硬件及操作系统的内存访问差异,java虚拟机使用java内存模型(java Memory Model,JMM)来规范java对内存的访问。这套模型在jdk 1.2中开始建立,经jdk 1.5的修订,现已逐步完善起来。什么是java内存模型什么是java内存模型,为什么会有这个模型?关于这个问题,就不得不从并发的问题讲起。在多核系统中,处理器一般设置缓存来加速数据的读取,缓存大大提升了程序性能原创 2017-02-05 10:19:48 · 2440 阅读 · 0 评论 -
java多线程之线程通信
在多线程机制中,线程之间需要传输信息。一般有以下几种通信机制: 共享对象:通过在共享对象中设置信号量,多个线程通过读取、修改该信号量来通信。 wait/notify()方法:线程之间通过调用wait()、notify()方法实现线程等待、唤醒状态,从而达到线程通信的目的。 接下来我们分别看看这两种方法:通过共享对象通信在共享对象中设置信号量是最简单也是最常用的线程通信方法。共享变量需要使用volat原创 2017-05-11 13:23:35 · 533 阅读 · 0 评论 -
ReentrantLock原理探究(二)
前言上篇ReentrantLock原理探究(一)介绍了ReentrantLock类的使用说明,详细解析了关于非公平锁的lock()过程。这篇我们继续分析。原创 2017-05-24 12:42:10 · 724 阅读 · 0 评论 -
ReentrantLock原理探究(一)
前言ReentrantLock类是synchronized语义的替代品,可以实现与其相同的功能,了解其实现原理对并发编程无疑是很有帮助的。其次,ReentrantLock 的实现基础AQS(AbstractQueuedSynchronizer)也是java并发编程中相当重要的一个类,所以无论如何,我们都要了解一番。原创 2017-05-21 10:16:32 · 1202 阅读 · 3 评论