黑马程序员技术交流社区
标题:
线程2怎么没有启动啊?哪个地方出问题了?求指点
[打印本页]
作者:
李前进
时间:
2014-3-20 11:04
标题:
线程2怎么没有启动啊?哪个地方出问题了?求指点
class Ticket implements Runnable
{
private int tick = 100;
Object obj = new Object();
boolean flag = true;
public void run()
{
if(flag)
{
while(true)
{
synchronized(this)
{
if(tick>0)
{
try{Thread.sleep(10);}catch (Exception e){}
System.out.println(Thread.currentThread().getName()+"....code :"+ tick--);
}
}
}
}
else
while(true)
show();
}
public synchronized void show()
{
if(tick>0)
{
try{Thread.sleep(10);}catch (Exception e){}
System.out.println(Thread.currentThread().getName()+"....show.... :"+tick--);
}
}
}
class ThisLockDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
try{Thread.sleep(10);}catch (Exception e){}
t.flag = false;
t2.start();
}
}
复制代码
作者:
leon_hm
时间:
2014-3-20 11:16
Thread-0....code :100
Thread-0....code :99
Thread-0....code :98
Thread-0....code :97
Thread-0....code :96
Thread-1....show.... :95
Thread-1....show.... :94
Thread-1....show.... :93
Thread-1....show.... :92
Thread-1....show.... :91
复制代码
上面是我这边执行的结果,线程2启动了啊
作者:
李前进
时间:
2014-3-20 11:27
我的一直是这样啊
4.png
(12.7 KB, 下载次数: 18)
下载附件
2014-3-20 11:26 上传
作者:
李前进
时间:
2014-3-20 11:33
一直到1都是只有只有一个线程
2.png
(49.86 KB, 下载次数: 13)
下载附件
2014-3-20 11:32 上传
作者:
leon_hm
时间:
2014-3-20 12:59
class Ticket implements Runnable
{
private int tick = 100;
Object obj = new Object();
boolean flag = true;
public void run()
{
if(flag)
{
while(true)
{
synchronized(this)
{
if(tick>0)
{
try{Thread.sleep(100);}catch (Exception e){}//把sleep的时间改长点试试
System.out.println(Thread.currentThread().getName()+"....code :"+ tick--);
}
}
}
}
else
while(true)
show();
}
public synchronized void show()
{
if(tick>0)
{
try{Thread.sleep(100);}catch (Exception e){}//把sleep的时间改长点试试
System.out.println(Thread.currentThread().getName()+"....show.... :"+tick--);
}
}
}
class ThisLockDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
try{Thread.sleep(10);}catch (Exception e){}
t.flag = false;
t2.start();
}
}
复制代码
把sleep的时间改长点试试
作者:
青木郎
时间:
2014-3-20 13:29
没有问题,如果你没有出现第二个线程,也是正常的,因为本来就是一起执行的,有可能第二个线程还没开始执行,第一个线程已经执行完毕
解决的两个方法:
1.运行多次。有可能会发现两个线程交替运行
2.让线程等待时间长一些
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2