synchronized关键字

参考链接:https://blog.csdn.net/weiyongxuan/article/details/46493803

 

https://blog.csdn.net/qq_34902522/article/details/76262812先来了解几个定义:

临界区:Critical Section

临界区是一个用以访问共享资源的代码块,这个代码块在同一时间内只允许一个线程执行。

同步:

1、当一个线程试图访问一个临界资源时,它将使用一种同步机制来查看是不是已经有其他的线程进入临界区。

2、如果临界区没有其他的线程,他就可以进入临界区。如果已经有线程进入临界区,它就被同步机制挂起,直到进入的线程离开临界区。

3、如果在等待临界区的线程不只一个,jvm就会选择其中一个,其他的继续等待。

java采用两种基本的同步机制:

一种是:synchronized关键字机制

另一种是:lock接口及其实现

synchronize关键字机制

synchronize修饰方法

1、使用synchronize关键字的方法性能比较低

2、每一个使用synchronize修饰的方法都是临界区

3、使用synchronize修饰的对象,那么同一时间只能有一个执行线程访问,如果其他线程试图访问这个对象的其他方法,都将被挂起

4、synchronize修饰静态方法会怎么样?

使用synchronize修饰的静态方法,那么同一时间只能有一个执行线程访问,但是其他线程可以访问这个对象的非静态方法。

 

synchronize修饰代码块

1、方法的其余部分保持在synchronize代码块之外,以获取更好的性能

2、synchronized修饰代码块的参数是当前对象,注意是对象,不是类  

 

1、java中每个对象都有同步锁,同步方法是指进入该方法时需要获取this对象的同步锁,而同步代码块则是可以指定需要获取哪个对象的同步锁

2、无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――同步方法很可能还会被其他线程的对象访问

posted @ 2018-07-16 17:33  樱圃  阅读(113)  评论(0编辑  收藏  举报