黑马程序员技术交流社区
标题:
Runnable同步问题
[打印本页]
作者:
吴通
时间:
2012-8-23 21:53
标题:
Runnable同步问题
class Ticket implements Runnable
{
private int tick=1000;
Object obj=new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(tick>0)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
System.out.println("执行");
}
System.out.println(Thread.currentThread().getName()+tick--);
}
}
}
}
}
class TicketDemo2
{
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();
}
}
下面是打印的一段
Thread-0385
Thread-0384
Thread-0383
Thread-0382
Thread-0381
Thread-0380
Thread-0379
Thread-0378
Thread-0377
Thread-3376
Thread-3375
Thread-3374
Thread-3373
Thread-3372
Thread-3371
Thread-3370
Thread-3369
1.为什么打印会从300多到3000多?
2.run方法下面的while(true)是什么意思?
3.我这个程序定义了三个Thread,为什么打印没有显示啊?
求解
作者:
杨卓儒
时间:
2012-8-23 22:05
好吧 我先说第一个问题
1. 楼主所说的300多到3000多 应该是
03**
到
3***
看清楚啊~~第一位 就是线程的名字 所以不是从300多跳到3000多
而是从第一个线程跳到第4个线程了。
2.while(true)是为了让这个循环一直循环下去,是为了省事儿。其实应该限定当票数==0的时候停止,所以楼主不要纠结这个了。老师就是为了掩饰线程运行的过程。
3.请看1.
作者:
杨卓儒
时间:
2012-8-23 22:07
你吧这句话改一下 你再运行一下就清楚了!
System.out.println(Thread.currentThread().getName()+tick--);
改为
System.out.println(Thread.currentThread().getName()+
"-----"
+tick--);
作者:
童兴龙
时间:
2012-8-24 08:38
1.为什么打印会从300多到3000多?
因为你没有在Thread.currentThread().getName()后面加这个“ ” 。
2.run方法下面的while(true)是什么意思。
这个是一直循环的意思。
3.我这个程序定义了三个Thread,为什么打印没有显示啊?
楼上正解
作者:
吴通
时间:
2012-8-24 20:05
问题已解决 谢谢。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2