社区
Web 开发
帖子详情
什么时候该用synchronized?
jaogun
2007-04-30 03:40:39
什么时候该用synchronized?
...全文
535
6
打赏
收藏
什么时候该用synchronized?
什么时候该用synchronized?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xyw519605273
2012-08-07
打赏
举报
回复
学 习
synized
2012-02-09
打赏
举报
回复
可以避免用synchronized 就是不要有全局变量
ilovefzq
2012-02-09
打赏
举报
回复
嗯,不错,就是lz,顶抠的
gongyali2005
2007-05-01
打赏
举报
回复
多线程操作一个共享的变量时.
kaoloveting
2007-05-01
打赏
举报
回复
study
chang2030
2007-04-30
打赏
举报
回复
由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。
由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。
1. synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如:
public synchronized void accessVal(int newVal);
synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方
法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为 synchronized)。
在 Java 中,不光是类实例,每一个类也对应一把锁,这样我们也可将类的静态成员函数声明为 synchronized ,以控制其对类的静态成员变量的访问。
synchronized 方法的缺陷:若将一个大的方法声明为synchronized 将会大大影响效率,典型地,若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。当然我们可以通过将访问类成员变量的代码放到专门的方法中,将其声明为 synchronized ,并在主方法中调用来解决这一问题,但是 Java 为我们提供了更好的解决办法,那就是 synchronized 块。
2. synchronized 块:通过 synchronized关键字来声明synchronized 块。语法如下:
synchronized(syncObject) {
//允许访问控制的代码
}
synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。
JAVA各种锁的使用与原理专题(附源码讲义)
Java提供了种类丰富的锁,每种锁因...帮助大家剖析JAVA中各种锁的底层原理,例如
Synchronized
锁的膨胀与升级等,掌握企业面试中各种锁的面试题,胜任企业开发。 下面给出课程内容的总体分类目录:
并发编程:
synchronized
和lock有什么区别,什么时候用
synchronized
?什么时候用lock?
这个问题要从两个角度回答: 非功能层面 坊间传闻,从
synchronized
被优化后,效率略微高于lock,比较有利的证据是在1.8中ConcurrentHashMap处理同步时,直接使用了
synchronized
而不再使用lock。这个从某种程度上说明sun对自己的亲儿子还是比较认可的。 功能层面 lock支持tryLock、lockInterruptibly和超时获取锁,
synchronized
都不支持 lock支持公平、非公平两种锁,但是
synchronized
只能是非公平 使用lock时,必须手
java中什么是同步_Java中,“
synchronized
”(同步)是什么意思?什么时候应
该用
synchronized
? - Break易站...
synchronized
关键字的意义是什么?什么时候应该是方法
synchronized
?这是什么编程和逻辑?Java中,“
synchronized
”(同步)是什么意思?什么时候应
该用
synchronized
?该
synchronized
关键字是所有不同的线程读取和写入相同的变量,对象和资源。这在Java中并不是一个简单的话题,但是这里是Sun的一句话:
synchronized
方法为防止线程干扰和内...
为什么atomicIneger底层要用CAS而不是
synchronized
?
A.
synchronized
采用的是悲观锁,是一种独占锁,独占锁就意味着 其他线程只能依靠阻塞来等待线程释放锁。而在 CPU 转换线程阻塞时会引起线程上下文切换,当有很多线程竞争锁的时候,会引起 CPU 频繁的上下文切换导致效率很低 B.CAS采用的是一种乐观锁的机制,它不会阻塞任何线程,所以在效率上,它会比
synchronized
要高。所谓乐观锁就是:每次不加锁而是假设没有冲突而去完成某项操...
什么是
Synchronized
?偏向锁又是什么鬼?
1、作用: (1)确保线程互斥的访问同步代码 (2)保证共享变量的修改能够及时可见 (3)有效解决重排序问题。 2、用法: 1、修饰实例方法 作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁。 2、修饰静态方法 作用于类的所有对象的锁。 如果线程A调用实例对象的非静态
Synchronized
方法,而线程B调用这个实例对象所属类的静态
Synchronized
方法,是允许的,不会发生互斥现象, 因为访问静态
Synchronized
方法是占用的锁是当前类的锁,而访问非静态
Synchronized
Web 开发
81,094
社区成员
341,711
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章