synchronized的简单理解
2024-08-27 11:43:44
synchronized能够保证在同一时刻只有一个线程执行该段代码。
使用synchronized能够防止多个线程同时并发访问程序的某些资源。
synchronized既可以修饰变量,也可以修饰方法,还可以用于代码块。
使用synchronized的原则:锁的范围尽可能小,锁的时间尽可能短。即能锁对象,就不要锁类。能锁代码块,就不要锁方法。
1.使用synchronized修饰方法。同步方法。
即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候。当前线程执行完该方法后,别的线程才能进入.
public synchronized void synMethod() {
//方法体
}
这里,synchronized 关键字锁住的是当前对象。
为什么锁住的是当前对象?因为此处synMethod()是个实例方法,要想执行synMethod(),需要以 对象.方法() 的形式进行调用。
假设obj是类的一个对象,调用方法就是obj.synMethod(),synchronized就是把obj这个对象加锁了。
2.使用synchronized修饰对象。也就是对象锁。
以下代码中的this,指的是当前类的对象。
public void synMethod() {
synchronized(this){ }
}
3.使用synchronized修饰变量。也就是成员锁。
public int synMethod(int a1){
synchronized(a1) {
//一次只能有一个线程进入
}
}
最新文章
- Java 多线程之单例设计模式
- 怎样手动添加 Sublime 3 右键菜单
- React-Native入门指导之iOS篇
- [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果
- Codeforces Round #360 (Div. 2) E. The Values You Can Make 01背包
- sublime开启php自动代码补全
- 使用VIM + Ctags
- js正则验证邮箱格式
- Hibernate框架--关联映射,一对多,多对多 inverse cascade
- meta--------link
- Centos 开机后,登录时无法输入密码怎么解决
- 为什么说汽车VIN码是汽车唯一的";身份证";
- ajax请求处理和views处理函数的优先级
- COS对象存储服务的使用
- javasrcipt的作用域和闭包(二)续篇之:函数内部提升机制与Variable Object
- 2018面向对象程序设计(Java)第17周学习指导及要求
- 转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)
- javaScript刷新页面
- JVM(一)
- Http方式下载文件