评论
# 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--+"号票");
}
}
}
} 回复 更多评论