[Java并发编程之美]第2章 synchroized关键字
2024-10-09 08:25:18
###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
最新文章
- mysql语句入门
- Deploying JRE (Native Plug-in) for Windows Clients in Oracle E-Business Suite Release 12 (文档 ID 393931.1)
- hdu2642二维树状数组单点更新+区间查询
- 实战MySQL集群,试用CentOS 6下的MariaDB-Galera集成版
- django 外键 ,django __
- 使用Jeditable插件时遇到的问题
- 制作Mac OS X Mavericks 安装U盘
- 一组神奇的 3D Gif 动图
- 性能测试 - some
- Android 主线程和线程之间相互发送消息
- 【Web】HttpServletRequest request 相关方法 得到路径
- iOS开发之pch文件
- Java中三种比较常见的数组排序
- java代码的编译、执行过程
- vue项目打包之后js文件过大怎么办?
- Django-rest-framework 接口实现 Serializer 使用
- 步步為營-96-MyMVC2
- JS 引用类型之Object
- ";error lnk1158 无法运行rc.exe”解决方案
- hdu 5054
热门文章
- 洛谷P1028.数的计算(动态规划)
- 题解 SGU294 He's Circles
- C++中将对象this转换成unsigned char指针
- C++ 不具有继承关系的类之间的显式,隐式转换 2013-07-11 15:41
- 顶级技术盛会KubeCon 2020,网易轻舟布道多云环境云原生应用交付
- add application window with unknown token XXX Unable to add window;is your activity is running?
- Jmeter逻辑控制器之If Controller的使用解析
- IDEA的externel tool配置Javap -c 命令
- Swing记事本项目
- python 复制与粘贴处理笔记