多线程与高并发

synchronized

synchronized 锁的是对象而不是代码,synchronized(this)synchronized方法 是一样的,都是锁定当前对象。锁升级从偏向锁到自旋锁再到重量级锁。

阅读更多

高速缓存,写缓冲器和无效队列

高速缓存

由于处理器的运行速度远远大于内存的读写速度,为了提高性能,所以硬件设计者引入了高速缓存的概念。
高速缓存是一种速度比内存快,但大小远远比内存小的存储部件。有了它之后,处理器不再与内存发生直接的操作,而是读写高速缓存里的数据,高速缓存在与内存发生读写操作。

阅读更多

死锁产生的条件及解决

死锁产生的条件

  • 互斥
    线程对所分配的资源进行排他性控制,即在一段时间内某资源仅为一个线程所占有。
    此时若有其他线程请求该资源,则请求线程只能阻塞等待。
阅读更多

如何理解线程安全

线程安全问题都是由全局变量及静态变量引起的。

JVM运行时数据区包括了程序计数器,本地方法栈,jvm栈,堆。在这四个区中,前三个都是线程间隔离的。
只有堆内存是线程间共享的。而全局变量放在堆内存中,各线程内jvm栈只保存了对象引用,所以各线程更改的还是一个
内存地址的数据。

阅读更多

ThreadLocal的使用与源码

使用

当有一个单例类中有实例变量,而业务逻辑又要对变量进行处理,当有多个线程同时操作时,如果没有给处理代码加上锁,就有可能出现线程安全问题。如:我们最常见的获取JDBC连接的
连接,还有我们交给Spring容器管理的类等

阅读更多

ConcurrentHashMap

JDK1.8之前ConcurrentHashMap

  • concurrentHashMap在JDK1.5出现的,为了解决HashMap线程不安全问题和Hashtable使用synchronized导致并发性能低问题。
阅读更多