请问下这段代码为什么能够实现同步?

2016-06-17 09:17:57
/*
* 通过多线程来实现多窗口售票模式
*
* */

class TicketWin extends Thread{
static int ticket = 50;
static Object obj = new Object();
static int m=0;
public void run(){
synchronized (obj) {
for(int i=50;ticket>0;ticket--){
System.out.println(Thread.currentThread().getName()+"售出 : 票"+ticket);
m++;
}
}
}
}

public class TicketSoldTest {
public static void main(String[] args){
TicketWin tw1 =new TicketWin();
TicketWin tw2 =new TicketWin();
TicketWin tw3 =new TicketWin();

tw1.start();
tw2.start();
tw3.start();
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
System.out.println(tw1.m);
}
}


如上面的代码 ,

我的理解是,在主程序中,创建了一个三个对象 。
那么,这个 run方法,应该是在三个不同的地方了。为什么用一把锁还是能锁住呢。

...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_08_06_02 2016-07-28
  • 打赏
  • 举报
回复
是的,楼主的代码感觉一个线程就把票卖光了,不给另外2个机会啊
soton_dolphin 2016-06-18
  • 打赏
  • 举报
回复
静态变量的锁是在class层面上,不是实例化的对象上
击楫流中 2016-06-17
  • 打赏
  • 举报
回复
楼上说的对哦,使用的是静态变量。同步锁,锁定的是同一个对象,当然是可以的。 从你的测试代码来看,3个线程就是一个线程就把票卖光了
zhongzhan2011 2016-06-17
  • 打赏
  • 举报
回复
obj是静态的,所以三个对象获取的是同一把锁,是这样子吧

62,615

社区成员

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

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