java多线程笔记(2)——关于synchronized关键字一些注意事项

来源:互联网 发布:para海外专营店淘宝 假 编辑:程序博客网 时间:2024/05/17 08:27

synchronized关键字的作用域有两种:

一、在某个对象的实例内,synchronized对实例方法的作用,它可以防止多个线程同时访问同一对象的synchronized方法;
二、类的static方法上进行修饰,可以防止多个线程访问这个类的同步静态方法。


同步代码块中的做用对象应当是当前实例对象。
synchronized关键字不能继承,也就是说,如果基类的某个方法被synchronized所修饰,那么子类的该方法并不会继承synchronized关键字。
总结一下就是:synchronized关键字可以作为方法的修饰符,同时,也可以作为方法内部语句的修饰符,当然也可以直接作为同步代码块的修饰符。当然无论如何,synchronized取得的锁永远都是对象,而不可能将一段代码作为锁;每个对象只有一个锁;同步会产生极大的系统开销,使用不当还有可能发生死锁,所以如非必要,尽量不要使用同步机制。


不同场景下使用synchronized关键字:
1. 在对象方法上,此时锁定的对象是调用该方法的实例对象,它等同于在方法内部使用

synchronized(this){//同步代码块}

此时的this指代的就是调用该方法的对象。
2. synchronized作用于静态方法,它锁定的是该类,以免多线程同时调用该方法,等同于在静态方法内部使用

synchronized(className.class){//className表示当前类名}
原创粉丝点击