黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
淡然
时间:
2012-6-12 21:48
标题:
多线程问题
package hcy.test.main;
class ThreadDemo implements Runnable//extends Thread
{
private static int ticket=50;
public static Object obj=new Object();
public void run(){
while(true){
synchronized(obj){
try {
Thread.sleep(500);//睡眠0.5秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(0<ticket)
System.out.println(Thread.currentThread().getName()+" run``` "+ticket--);
}
}
}
}
public class Test {
public static void main(String[] args){
// TODO Auto-generated method stub
ThreadDemo td=new ThreadDemo();
Thread thread1=new Thread(td);
Thread thread2=new Thread(td);
Thread thread3=new Thread(td);
Thread thread4=new Thread(td);
thread1.start();//
thread2.start();
thread3.start();
thread4.start();
}
}
复制代码
怎么随着sleep时间的增大,所有的ticket都被Thread-0卖掉了?我的锁明明是加在while循环的里面的。
输出结果如下:
Thread-0 run``` 50
Thread-0 run``` 49
Thread-0 run``` 48
·
·中间全是Thread-0 run```XX
·
Thread-0 run``` 3
Thread-0 run``` 2
Thread-0 run``` 1
求解析?
作者:
黄克帅
时间:
2012-6-12 22:16
你多实验几次,最好是把数字设大点。或者再把线程的权限设置成不同去试试
作者:
淡然
时间:
2012-6-12 22:22
只要把数字设小点就正常了,但是数字越大我说的现象越明显
作者:
舒赫莱宁
时间:
2012-6-12 22:24
你的电脑没什么问题么,我怎么感觉是四个线程同时卖的
运行结果正确的啊
还有我不明白你锁了个object有什么意义
作者:
马东华
时间:
2012-6-12 22:54
多运行几次吧,我的运行也是成功的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2