有关多线程同步的小问题

qq_3126433 2015-10-01 10:38:13
先上代码
//同步代码块例子--正确的例子
public class Test{
public static void main(String[] args){
SalesWindow sw=new SalesWindow();
new Thread(sw,"窗口1").start();
new Thread(sw,"窗口2").start();
new Thread(sw,"窗口3").start();
new Thread(sw,"窗口4").start();
}
}
class SalesWindow implements Runnable{
private int tickets=10;
Object lock=new Object();
public void run(){
while(true){
synchronized(lock){
try{
Thread.sleep(10);
}
catch(InterruptedException e){
e.printStackTrace();
}
if(tickets>0){
System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets--+"张票");
}
else{
break;
}
}
}
}
}
这个代码输出的结果为
线程1---卖出的票10
线程1---卖出的票9
线程1---卖出的票8
线程1---卖出的票7
线程1---卖出的票6
线程1---卖出的票5
线程1---卖出的票4
线程1---卖出的票3
线程1---卖出的票2
线程1---卖出的票1


我的问题是理论上不是应该4个线程一起来卖这10张票么?为什么在这只有线程1在卖,实在是搞不懂~求高人回答
...全文
126 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_3126433 2015-10-02
  • 打赏
  • 举报
回复
引用 1 楼 defonds 的回复:
private int tickets=10;
所有票都是线程 1 私有的,其他线程根本拿不到。当然只有线程 1 在卖了
好像不是这个问题,我改过试了还是一样。不过在java se区有人回答了,票设定的多一点就能看到其他线程在卖了,多谢关注回答~
Defonds 2015-10-02
  • 打赏
  • 举报
回复
private int tickets=10;
所有票都是线程 1 私有的,其他线程根本拿不到。当然只有线程 1 在卖了

81,114

社区成员

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

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