对 synchronized 同步理解不够,谁能不能帮帮我。

no9988 2008-05-30 01:23:51
对 synchronized 同步理解不够,谁能帮帮我。

给我举几个实际的例子说明一下。


谢谢咯!
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
H~~~ 2008-05-30
  • 打赏
  • 举报
回复
举个例子:
一群人排队上厕所,进去一个把门锁上,别人就进不去,出来之后别人再进!
no9988 2008-05-30
  • 打赏
  • 举报
回复


谢谢楼上的几位哦

这个分 是怎么给的

我刚刚注册DSDN 还不太熟悉`
`
abc44718455 2008-05-30
  • 打赏
  • 举报
回复
比如说,两个地方卖同样一列火车的火车票,如果不同步,就可能出现两个地方同时卖出一张票,比如:A地方有人买票,发现票号为6的还没卖出,他就准备买下票号为6的票,同时B地方也发现6号票没卖出,也有人准备买这张票,这时,如果这两个地方不同步,6号票就可能被同时卖出,如果同步,则只有一个地方卖出这张票
finalzhzhk 2008-05-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 finalzhzhk 的回复:]
synchronized 就是把一个对象(或一个方法)设个标志位。这个标志位的值是0或1。
当访问这个对象(或方法)时,首先监测标志位是不是0,如果不是0说明别人在用,那么就等待。如果是0,说明
这个对象现在可用,那么把标志位设为1,然后用这个对象,使用结束后再设置标志位为0
:)simple


[/Quote]
对了,说明一下,这不是我的理解,也不是比喻,而是java的锁机制
finalzhzhk 2008-05-30
  • 打赏
  • 举报
回复
synchronized 就是把一个对象(或一个方法)设个标志位。这个标志位的值是0或1。
当访问这个对象(或方法)时,首先监测标志位是不是0,如果不是0说明别人在用,那么就等待。如果是0,说明
这个对象现在可用,那么把标志位设为1,然后用这个对象,使用结束后再设置标志位为0
:)simple

duzhonghua 2008-05-30
  • 打赏
  • 举报
回复
你买火车票的那个系统就用到了同步........
GODProbe 2008-05-30
  • 打赏
  • 举报
回复
一个对象有且只有一个同步锁、这个锁就是一个对象、可能就是这个对象本身。
当前线程执行一个对象中的synchronized代码块或用synchronized修饰的方法时必须首先获得这把锁、此时这把锁就是这个对象。这把锁不是这个对象的情况是:synchronized(其他对象引用){...}。
当前线程只有持有这把锁才能自由调用该对象上的synchronized代码块或synchronized修饰的方法。
如果这把锁在别的线程手里,那么jvm将当前线程存入该对象的锁等待池,只有持有锁线程释放这把锁后,当前线程才有可能继续运行。持有锁线程如果异常退出会释放锁、持有锁线程执行了该对象的wait方法也会释放锁并进入该对象的等待池中(注意不是锁等待池)直到别的线程调用该对象的notify方法则jvm随机在等待池挑选一个线程来执行。
Thread.yield方法或sleep方法不会释放锁、只是把运行机会让给其他线程。yield方法让给至少同优先级的其他线程、sleep则是直接令当前线程休眠。

62,614

社区成员

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

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