synchronized
synchronized
锁的是对象而不是代码,synchronized(this)
和 synchronized方法
是一样的,都是锁定当前对象。锁升级从偏向锁到自旋锁再到重量级锁。
synchronized
锁的是对象而不是代码,synchronized(this)
和 synchronized方法
是一样的,都是锁定当前对象。锁升级从偏向锁到自旋锁再到重量级锁。
由于处理器的运行速度远远大于内存的读写速度,为了提高性能,所以硬件设计者引入了高速缓存的概念。
高速缓存是一种速度比内存快,但大小远远比内存小的存储部件。有了它之后,处理器不再与内存发生直接的操作,而是读写高速缓存里的数据,高速缓存在与内存发生读写操作。
线程安全问题都是由全局变量及静态变量引起的。
JVM运行时数据区包括了程序计数器,本地方法栈,jvm栈,堆。在这四个区中,前三个都是线程间隔离的。
只有堆内存是线程间共享的。而全局变量放在堆内存中,各线程内jvm栈只保存了对象引用,所以各线程更改的还是一个
内存地址的数据。
当有一个单例类中有实例变量,而业务逻辑又要对变量进行处理,当有多个线程同时操作时,如果没有给处理代码加上锁,就有可能出现线程安全问题。如:我们最常见的获取JDBC连接的
连接,还有我们交给Spring容器管理的类等