基础篇幅:线程基础知识、并发安全性、JDK锁相关知识、线程间的通讯机制、JDK提供的原子类、并发容器、线程池相关知识点 高级篇幅:ReentrantLock源码分析、对比两者源码,更加深入理解读写锁,JAVA内存模型、先行发生原则、指令重排序 环境说明: idea、java8、maven 第四章-- ...
分类:
编程语言 时间:
2018-11-09 12:12:49
阅读次数:
187
1.加锁方式: 1-1.使用synchronized关键字进行方法或代码块的加锁方式 1-2.使用ReentrantLock类提供的lock()方法的方式 2.代码实现(传统的银行取款存款问题): 2-1.Account.java类:账户类 package com.java.thread; impo ...
分类:
编程语言 时间:
2018-11-05 16:26:24
阅读次数:
268
重入锁基本使用: 使用java.util.concurrent.locks.ReentrantLock 类来实现,可以替代synchronized关键字。如下例,重入锁有着显示的操作过程,开发者可以手动指定在哪里加锁,在哪里释放(退出临界区时必须释放,不然其他线程没有机会再访问了)。重入的意思是,同 ...
分类:
其他好文 时间:
2018-11-03 23:06:56
阅读次数:
168
1、Lock只是一个接口,基本开一个Lock就是开一个可重入锁: Lock lock = new ReentrantLock(); 2、wait(),wait(long timeout),notify(),notifyAll(),这些方法配合synchronized关键字一起使用可以实现等待/通知模 ...
分类:
编程语言 时间:
2018-10-17 14:36:11
阅读次数:
162
Lock接口 Lock是并发包中的基础接口。 Lock接口的实现基本都是通过聚合了一个同步器的子类来完成线程访问控制的。比如常见的ReentrantLock。 队列同步器 AbstractQueuedSynchronizer(简称AQS),是用来构建锁或者其它同步组件的基础框架。它使用了一个int成 ...
分类:
编程语言 时间:
2018-10-16 01:50:32
阅读次数:
169
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public class Four { public static void main(String[] arg... ...
分类:
编程语言 时间:
2018-10-14 13:54:53
阅读次数:
208
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public class Five { public static void main(String[] arg... ...
分类:
编程语言 时间:
2018-10-14 13:47:46
阅读次数:
174
之前的文章讲了ReentrantLock和synchronized都是通过锁来保证线程安全的,锁机制存在一些问题,例如: ? 在多线程的竞争下,加锁、释放锁会导致很多线程的上下文切换和调度,对性能有一定的影响; ? 一个线程持有锁会导致其他需要此锁的线程挂起(强行在锁的区域将并行变为串行); ? 使 ...
分类:
其他好文 时间:
2018-10-11 15:16:07
阅读次数:
157
为什么需要使用分布式锁 为了保证同一个方法在高并非情况下的同一时间只能被一个线程执行,在传统单体应用单机部署的情况下,可以使用java并发处理的api(如Reentrantlock和synchronized)进行互斥控制,但是,随着业务发展的需要,原单体单机的系统被演化成分布式系统后,由于分布式系统 ...
分类:
其他好文 时间:
2018-10-08 15:07:25
阅读次数:
164
Lock (interface) (jdk1.5特性)? 常用方法 void lock(): 获取锁。 void unlock(): 释放锁。 ? ReentrantLock extends Lock 我们一般用 lock 的实现类( ReentrantLock 类)构建对象? 示例代码 @Over ...
分类:
其他好文 时间:
2018-10-06 15:29:40
阅读次数:
161