1、概述 1.1、jdk5之前,用于 调节共享对象访问机制 只有 synchronized、volatile; jdk5之后,提供了 显示锁:Lock、ReentrantLock...; 显式锁 并不是 内部锁机制 的替代,而是 当内部锁被证明受到局限时,提供可选择的高级特性; 1.2、 ...
分类:
编程语言 时间:
2019-12-13 12:05:47
阅读次数:
87
故事起源于上次阿里电面的3个问题。问题1,jvm中线程分为哪些状态。问题2,在执行Thread.start()方法后,线程是不是马上运行。问题3,java中的synchronized和ReentrantLock有什么不同。当时我的回答不是很好,就不说了,面试之后,在网上搜了很多文章,对照着jdk源码 ...
分类:
其他好文 时间:
2019-12-11 19:35:01
阅读次数:
93
1. 如何使用 ReentrantLock 中的 可中断锁防止死锁? 答: 在 执行语句前 加 可中断锁,此时,当被打断时,会抛出 被中断异常,这样就可以解锁。 注意:要外部中断,死锁中的线程不会自己中断 public class ReentrantLockTest { static Lock lo ...
分类:
其他好文 时间:
2019-12-10 22:37:52
阅读次数:
116
我们使用的synchronized加的锁是可以延续使用的,如下: public void test() { //第一次获得锁 synchronized(this) { while(true) { //第二次获得同样的锁 synchronized(this) { System.out.println( ...
分类:
编程语言 时间:
2019-12-09 19:07:54
阅读次数:
79
前言 AQS即AbstractQueuedSynchronizer,是JUC包中的一个核心抽象类,JUC包中的绝大多数功能都是直接或间接通过它来实现的。本文是AQS系列的第一篇,后面会持续更新多篇,争取将JUC包中AQS相关的常用功能讲清楚,一方面巩固自己的知识体系,一方面亦可与各位园友互相学习。寒 ...
分类:
其他好文 时间:
2019-12-07 23:22:00
阅读次数:
123
简介: AQS全称 AbstractQueuedSynchronizer,提供了一个基于FIFO(先进先出)队列,可以用于构建锁或者其他相关同步装置的基础框架。 ReentrantLock、Semaphore、CountDownLatch、FutrueTask,这些都是基于AQS构建的。 而AQS是 ...
分类:
编程语言 时间:
2019-12-04 23:40:01
阅读次数:
126
Java锁原理学习 为了学习Java锁的原理,参照ReentrantLock实现了自己的可重入锁,代码如下: 先上AQS的相关方法: 以下是自己实现的MyLock: 测试程序: ...
分类:
编程语言 时间:
2019-12-03 01:45:31
阅读次数:
107
一个生产者和一个消费者 public class ConditionTest { private static ReentrantLock lock = new ReentrantLock(); private static Condition condition = lock.newConditi ...
分类:
其他好文 时间:
2019-11-17 23:59:56
阅读次数:
112
公平锁,非公平锁 1. 公平锁:在多线程环境下,按照申请锁的顺序获得锁 2. 非公平锁:在多线程环境下,不一定按照申请锁的顺序获得锁,后申请锁的线程可以优先获得锁,有可能造成优先级反转或者饥饿现象 3. 在ReentrantLock中,可以通过构造函数中的boolean值来指定是否为公平锁, 默认是 ...
分类:
编程语言 时间:
2019-11-11 15:43:10
阅读次数:
83
本文基于 "https://github.com/h2pl/Java Tutorial" 的总结 Java7 HashMap(数组+链表) Java7 ConcurrentHashMap(段(数组+链表)+ ReentrantLock) Java8 HashMap (数组+链表+红黑树) ( 如果链 ...
分类:
编程语言 时间:
2019-11-10 19:34:07
阅读次数:
73