多线程--synchronized

目录

1.synchronized关键字的概念

2.synchronized关键字的使用方式


1.synchronized关键字的概念

synchronized解决的是多个线程之间访问资源的同步性,synchronized可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。java早期版本,synchronized属于重量级锁,效率低下,因为监视器锁依赖于底层操作系统的Mutex Lock来实现的。jdk1.6版本对synchronized引入了大量的优化,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少锁操作的开销,其效率也得到了优化。

2.synchronized关键字的使用方式

(1)修饰实例方法

作用于当前对象实例(method)加锁,进入同步代码块前要获得当前对象实例的锁。当一个线程访问synchronized实例方法,另一个线程可以异步访问非synchronized实例方法。

(2)修饰静态方法

作用于当前类对象(Class)加锁,进入同步代码块前要获得当前类对象的锁。当一个线程访问一个实例对象的synchronized静态方法(占用的是当前类对象锁),另一个线程可以异步访问此实例对象的非synchronized静态方法(占用的是当前对象实例锁)。

(3)修饰代码块

对给定对象加锁,进入同步代码块前要获得给定对象的锁。synchronized(this)与修饰实例方法的效果一致,synchronized(class)与修饰静态方法的效果一致。尽量不用使用synchronized(String a),因为在jvm中字符串常量池具有缓冲效果。

你可能感兴趣的:(Java基础)