HashMap与HashTable、ConcurrentHashMap HashMap:线程不安全 在多线程情形下会导致死循环 HashTable:线程安全但是效率低下synchronized保证线程安全弊端 进入等待或轮训场景既不能put也不能get。 ConcurrentHashMap:分段锁 ...
分类:
其他好文 时间:
2020-05-25 15:44:45
阅读次数:
46
[TOC] 内部锁 synchronized块有两个部分:锁对象的引用以及保护的代码块。 方法的锁是方法所在的对象本身,静态方法的锁是Class对象。 每个java对象都可以隐式的作为同步的锁的角色:这些内置的锁被称为内部锁(intrinsic locks)或者监视器锁(monitor locks) ...
分类:
编程语言 时间:
2020-05-25 12:38:17
阅读次数:
66
关于线程安全一提到可能就是加锁,在面试中也是面试官百问不厌的考察点,往往能看出面试者的基本功和是否对线程安全有自己的思考。 那锁本身是怎么去实现的呢?又有哪些加锁的方式呢? 我今天就简单聊一下乐观锁和悲观锁,他们对应的实现 CAS ,Synchronized,ReentrantLock 正文一个12 ...
分类:
其他好文 时间:
2020-05-24 13:43:50
阅读次数:
224
Lock锁 传统 synchronized 举例:买票的栗子 真正的多线程开发,公司中的开发,需要降低耦合度 线程是一个单独的资源,没有任何附属的操作! 单独的资源包含属性、方法 第一种:高耦合写法,Ticket线程类还有附属操作,不推荐使用 public class SaleTicketDemo0 ...
分类:
其他好文 时间:
2020-05-24 13:27:56
阅读次数:
59
在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。 Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以 ...
分类:
其他好文 时间:
2020-05-22 19:27:49
阅读次数:
58
前言 ReentrantLock是JUC提供的可重入锁的实现,用法上几乎等同于Synchronized,但是ReentrantLock在功能的丰富性上要比Synchronized要强大。 一、ReentrantLock的使用 ReentrantLock实现了JUC中的Lock接口,Lock接口定义了 ...
分类:
编程语言 时间:
2020-05-21 00:08:55
阅读次数:
59
1 为什么需要synchronized? 当一个共享资源有可能被多个线程同时访问并修改的时候,需要用锁来保证数据的正确性。请看下图: 线程A和线程B分别往同一个银行账户里面添加货币,A线程从内存中读取(read)当前账户金额($=0)到线程A的本地栈,进行+100的操作后,这时B线程也从内存中读取当 ...
分类:
其他好文 时间:
2020-05-20 14:29:44
阅读次数:
67
线程池的参数 创建线程的方式 如何暂停线程,有几种方式 线程之间的通讯 线程中什么是原子性、什么是可见性、什么是有序性? Volatile是如何实现可见性的? AQS中共享锁有哪些?独占锁有哪些 synchronized 关键字有几种用法? synchronized 的缺点有哪些? 静态方法和非静态 ...
分类:
编程语言 时间:
2020-05-19 22:56:32
阅读次数:
104
1. Vector & ArrayList1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。2) 当Vector或ArrayList中的 ...
分类:
其他好文 时间:
2020-05-18 00:52:59
阅读次数:
72
相信对Java程序员来说, synchronized 关键字对大家来说并不陌生,当我们遇到并发情况时,优先会想到用 synchronized 关键字去解决, synchronized 确实能够帮助我们去解决并发的问题,但是它会引起一些其他问题,比如最突出的一点就是程序效率问题,不过后面随着JDK1. ...
分类:
其他好文 时间:
2020-05-17 20:32:36
阅读次数:
132