本帖最后由 乔青山 于 2014-3-1 23:48 编辑
class Ticket implements Runnable
{
private int tick = 100;
Object obj = new Object();
public void run(){
while(true){
synchronized(obj){
if(tick>0){
try{
Thread.sleep(10);
}catch(Exception e){
}
System.out.println(Thread.currentThread().getName()+"sale:"+tick--);
}
}
}
}
}
class ThreadSafe
{
public static void main(String[] args){
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
这是毕老师刚讲到同步代码块的时候的一个小程序,然后打印结果的时候毕老师说:
可能打印出来的结果只有2线程,3线程,0线程没有,但是0线程依然启动了,因为0在2,3上面嘛。
然后我多打印了几次,发现有的时候只有0线程打印,像下面这种:
我想问的是,这种情况下。1线程,2线程,3线程启动了么?是只有0启动了,还是都启动了只不过1,2,3一直处在阻塞状态?
我刚学线程,有的地方不太懂,希望能回答清楚点,先谢谢各位学长了。
|