###synchronized关键字

  • synchronized块是Java提供的一种原子性内置锁,每个对象都可以把它当同步锁来用。线程在进入synchronized块钱会自动获取内部锁,这时候其他线程访问同步代码块时会被阻塞挂起。
  • synchronized会造成很大的系统开销,尽量避免不必要的使用。
  • 每种设置的锁对于一个对象(/锁加载静态方法和类上时是对于一个类的所有对象)锁只有一把。

###synchronized关键字可以修饰以下这些
####1 synchronized修饰一个方法

public class SingletonPattern {
public synchronized void method() {
//todo
}
}
  • 若子类中覆盖了父类中synchronized修饰的方法,则默认是不继承synchronized,需要的话要显示的加synchronized。

####2.1 synchronized修饰一个代码块

	public void method() {
//other part
int num1;
int num2;
synchronized(this) {
//todo
}
}
  • 当一个线程访问对象的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该对象中的非synchronized(this)同步的代码块。

####2.2 synchronized修饰一个指定对象

public class SingletonPattern {
public void method(SomeObject obj) {
synchronized(obj) {
//todo
}
}
}

####2.3 synchronized修饰一个特殊对象。只想同步代码块,没有明确要锁定的对象时,可以锁定一个特殊的对象

public class SingletonPattern {
private byte[] lock = new byte[0]; // 特殊的instance变量
public void method()
{
synchronized(lock) {
// todo 同步代码块
}
}
}

####3 synchronized修饰静态方法

  • 锁的是类,即类的所有对象共用一把锁。

####4 synchronized修饰类

class ClassName {
public void method() {
synchronized(ClassName.class) {
// todo
}
}
}
  • 同样,所有的类共用一把锁。

####参考链接
https://blog.csdn.net/sinat_32588261/article/details/72880159

最新文章

  1. mysql语句入门
  2. Deploying JRE (Native Plug-in) for Windows Clients in Oracle E-Business Suite Release 12 (文档 ID 393931.1)
  3. hdu2642二维树状数组单点更新+区间查询
  4. 实战MySQL集群,试用CentOS 6下的MariaDB-Galera集成版
  5. django 外键 ,django __
  6. 使用Jeditable插件时遇到的问题
  7. 制作Mac OS X Mavericks 安装U盘
  8. 一组神奇的 3D Gif 动图
  9. 性能测试 - some
  10. Android 主线程和线程之间相互发送消息
  11. 【Web】HttpServletRequest request 相关方法 得到路径
  12. iOS开发之pch文件
  13. Java中三种比较常见的数组排序
  14. java代码的编译、执行过程
  15. vue项目打包之后js文件过大怎么办?
  16. Django-rest-framework 接口实现 Serializer 使用
  17. 步步為營-96-MyMVC2
  18. JS 引用类型之Object
  19. "error lnk1158 无法运行rc.exe”解决方案
  20. hdu 5054

热门文章

  1. 洛谷P1028.数的计算(动态规划)
  2. 题解 SGU294 He's Circles
  3. C++中将对象this转换成unsigned char指针
  4. C++ 不具有继承关系的类之间的显式,隐式转换 2013-07-11 15:41
  5. 顶级技术盛会KubeCon 2020,网易轻舟布道多云环境云原生应用交付
  6. add application window with unknown token XXX Unable to add window;is your activity is running?
  7. Jmeter逻辑控制器之If Controller的使用解析
  8. IDEA的externel tool配置Javap -c 命令
  9. Swing记事本项目
  10. python 复制与粘贴处理笔记