volatile与synchoronized即使都是锁,达到的功能是一样的,那为什么还要创造这两者呢?

孤尽JavaSea 2009-09-07 09:19:11
它所修饰的变量不保留拷贝,直接访问主内存中的
这样可以形成简单的同步,是吗??
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤尽JavaSea 2009-10-08
  • 打赏
  • 举报
回复
volatile经常与transient变量搞混了。
WuBill 2009-09-08
  • 打赏
  • 举报
回复
关注
yekai012 2009-09-08
  • 打赏
  • 举报
回复
接上:这里的临界资源有可能是多个,而不是一个,由多个临界资源构成一个大的临界资源。举个例子,A需同时需要要 0 和 1这个两个临界资源,B也同时需要0和1这两个,那么当A得到0, B得到1怎么办?会死锁。这种情况下就要保证0和1问题为一个大的资源来管控。此时用volatile是无法做到的。
yekai012 2009-09-08
  • 打赏
  • 举报
回复
两者的意义是不一样的,volatile 修饰变量,读取的时候,强制重读,而synchronized,用于操作:将对临界资源的管控限制在一个原子操作之内。
  • 打赏
  • 举报
回复
这两个关键字在 API 上是找不到的吧?
java_object 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gesanri 的回复:]
volatile是变量修饰符,而synchronized则作用于一段代码
[/Quote]
还是要好好看api啊
gesanri 2009-09-07
  • 打赏
  • 举报
回复
volatile是变量修饰符,而synchronized则作用于一段代码
dz007 2009-09-07
  • 打赏
  • 举报
回复
volatile只是让数据可以即时得更新,保证数据的可见性,并不能实现操作的同步或者互斥

一般用来修饰简单的标识
比如根据标识boolean flg决定是等待还是继续
while(flg){
wait()
}

如果用synchoronized实现的话,写的时候要加锁解锁,读的时候还要加锁解锁……

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧