java锁机_java 同步锁(synchronized)

这篇博客讨论了Java中的同步锁synchronized的使用,通过多线程售票示例展示了其在防止数据不一致问题上的作用。博主分享了程序执行的不同结果,并指出线程调度的随机性可能导致不同输出。评论区中,读者提供了修正代码和深入的理解,强调了同步锁确保线程安全的重要性。
摘要由CSDN通过智能技术生成

评论

# re: java 同步锁(synchronized)

2012-10-29 15:46

eagledame

兄弟 是不是搞错了啊

a号窗口 ,售出20号车票

a号窗口 ,售出19号车票

a号窗口 ,售出18号车票

a号窗口 ,售出17号车票

a号窗口 ,售出16号车票

a号窗口 ,售出15号车票

a号窗口 ,售出14号车票

a号窗口 ,售出13号车票

a号窗口 ,售出12号车票

a号窗口 ,售出11号车票

d号窗口 ,售出10号车票

d号窗口 ,售出9号车票

d号窗口 ,售出8号车票

d号窗口 ,售出7号车票

d号窗口 ,售出6号车票

d号窗口 ,售出5号车票

d号窗口 ,售出4号车票  回复  更多评论

# re: java 同步锁(synchronized)

2012-10-29 15:56

eagledame

兄弟 我执行了你的程序1 和程序2 结果如上 。和你说的完全不一样 。求解释   回复  更多评论

# re: java 同步锁(synchronized)

2012-12-11 17:30

游客

卖完票 记得ticket--  回复  更多评论

# re: java 同步锁(synchronized)

2013-03-26 16:08

马容亮

我的理解 是java默认多线程,但是 多线程并发会导致 公用变量处理不准确,synchronized 同步 使 每个线程处理公用变量时,能够在一个完善的队列中完成。  回复  更多评论

# re: java 同步锁(synchronized)

2014-06-05 01:04

@eagledame

把值设置大点儿  回复  更多评论

# re: java 同步锁(synchronized)

2014-08-16 11:32

文宇

程序一和程序二都可以多窗口售票,只是票的总数不够大,没有等到b,c线程执行,当ticket=1000时,就可以看到  回复  更多评论

# re: java 同步锁(synchronized)[未登录]

2014-10-08 09:16

秋风

写得太好了,谢谢作者对人类软件事业进步所做出的重大贡献  回复  更多评论

# re: java 同步锁(synchronized)

2014-10-13 11:14

zyongsh

java线程调度是随机的,即使统一程序在同一台java虚拟机上执行的结果也可能会不同@eagledame

回复  更多评论

# re: java 同步锁(synchronized)

2014-11-28 10:18

家乐

public void run()

{

while (true)

{

synchronized (this)

{

if (ticket > 0)

{

System.out.println(Thread.currentThread().getName() + "号窗口卖出" + this.ticket-- + "号票");

}

else

{

System.out.println(Thread.currentThread().getName() + "票已售完");

break;

}

}

try

{

Thread.sleep(1000);

}

catch (InterruptedException e)

{

e.printStackTrace();

}

}

}  回复  更多评论

# re: java 同步锁(synchronized)[未登录]

2015-07-29 15:04

111

你这个不算是多线程的同步吧

回复  更多评论

# re: java 同步锁(synchronized)

2015-07-29 18:40

龙井

2、使用同步块修改上面的例子修改错误的,正确如下:

public void run()

{

for(int i=1;i<50;i++)

{

//休眠1s秒中,为了使效果更明显,否则可能出不了效果

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized(this){

if(ticket>0)

{

System.out.println(Thread.currentThread().getName()+"号窗口卖出"+this.ticket--+"号票");

}

}

}

}  回复  更多评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值