黑马程序员技术交流社区

标题: 关于多线程的小问题 [打印本页]

作者: 王红潮    时间: 2012-8-26 16:20
标题: 关于多线程的小问题
  1. class Ticket extends Thread
  2. {
  3. private int tick = 1000;
  4. public void run()
  5. {
  6. while (true)
  7. {
  8. if (tick>0)
  9. {
  10. System.out.println(currentThread().getName()+":::"+tick--);
  11. }
  12. }
  13. }
  14. }

  15. class Thread2
  16. {
  17. public static void main(String[] args)
  18. {
  19. Ticket t = new Ticket();
  20. Thread t1 = new Thread(t);
  21. Thread t2 = new Thread(t);
  22. t1.start();
  23. t2.start();
  24. }
  25. }
复制代码
创建多线程有两种方法:1,继承Thread类。2,实现Runnable接口。
上面的多线程继承的是Thread类,下面用的是第二种方法中将参数传递给Thread的构造函数,结果一样可以运行,但是线程名却是从Thread1开始的,没有Thread0,这是为什么?

作者: 方志亮    时间: 2012-8-26 16:35
我的猜测 应该是有可能Thread0为主线程    继续关注这个问题
作者: 王红潮    时间: 2012-8-26 17:02
方志亮 发表于 2012-8-26 16:35
我的猜测 应该是有可能Thread0为主线程    继续关注这个问题

主线程应该是main吧

作者: 方志亮    时间: 2012-8-26 17:13
我不是很清楚你的这个问题  所以我继续关注  我也想知道答案
作者: 全海波    时间: 2012-8-26 17:31
你可以多运行几次,或者将数值调大一点!
作者: 唐见    时间: 2012-8-26 18:03
本帖最后由 唐见 于 2012-8-26 18:05 编辑

class Ticket extends Thread//这里Ticket类继承了Thread类,而不是楼主说的实现Runnable接口
{
private int tick = 1000;
public void run()
{
while (true)
{
if (tick>0)
{
System.out.println(currentThread().getName()+":::"+tick--);
}
}
}
}

class Thread2
{
public static void main(String[] args)
{
Ticket t = new Ticket();//t对象本身就是Thread的子类了,加上一条t.start();就可以看到Thread0了
Thread t1 = new Thread(t);
//这个地方我倒搞不懂了,将Thread子类对象传给自己也行,Thread类的构造方法中好像没看到参数可以是Thread类的
Thread t2 = new Thread(t);
t.start();//加上这条就可以看到Thread0
t1.start();
t2.start();
}
}
作者: 李新立    时间: 2012-8-26 19:08
标题: RE: 关于多线程的小问题
唐见 发表于 2012-8-26 18:03
class Ticket extends Thread//这里Ticket类继承了Thread类,而不是楼主说的实现Runnable接口
{
private in ...

Thread t1 = new Thread(t);
开始也没看懂,查了查api,原来Thread本身就是实现了Runnable接口,都忘了
public class Thread extends Objectimplements Runnable
又学习了一次




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2