黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
陌路行者
时间:
2013-7-3 18:21
标题:
多线程问题
本帖最后由 陌路行者 于 2013-7-3 20:22 编辑
class Ticket extends Thread
{
int tick = 100;
public void run()
{
while(true)
{
if(tick>0)
{
System.out.println(Thread.currentThread().getName()+".........."+tick);
tick--;
}
}
}
}
class ThreadDemo
{
public static void main(String[] args)
{
//Ticket t = new Ticket();
Thread t1 = new Thread(new Ticket());
Thread t2 = new Thread(new Ticket());
Thread t3 = new Thread(new Ticket());
Thread t4 = new Thread(new Ticket());
t1.start();
t2.start();
t3.start();
t4.start();
}
}
复制代码
QQ图片20130703175035.jpg
(54.96 KB, 下载次数: 0)
下载附件
2013-7-3 18:20 上传
就开了4个线程怎么还蹦到7了呢
作者:
j816326
时间:
2013-7-3 18:56
Thread t1 = new Thread(new Ticket()); 你用的是匿名对象。执行完没有指向就被回收了。所以会出现这种状况
作者:
杜光
时间:
2013-7-3 20:20
本帖最后由 杜光 于 2013-7-3 20:26 编辑
一:首先你这个代码调用的不是一个共享的Ticket,看你的代码是4个线程,每个线程都有100张票
二:Ticket extends Thread
主线程这样写比较好点
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
复制代码
第三:你写的貌似是实现接口的方法
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();
复制代码
第四:你的主函数相当于一下子创建两个线程,而你start开启的是 t1,t2,t3,t4分别是 1,3,5,7 线程
而四个 new Ticket 分别是是 0,2,4,6 线程
作者:
杜光
时间:
2013-7-3 20:21
楼主你好 如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2