A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王红潮 中级黑马   /  2012-8-26 16:20  /  2049 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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,这是为什么?

6 个回复

倒序浏览
我的猜测 应该是有可能Thread0为主线程    继续关注这个问题
回复 使用道具 举报
方志亮 发表于 2012-8-26 16:35
我的猜测 应该是有可能Thread0为主线程    继续关注这个问题

主线程应该是main吧
回复 使用道具 举报
我不是很清楚你的这个问题  所以我继续关注  我也想知道答案
回复 使用道具 举报
你可以多运行几次,或者将数值调大一点!
回复 使用道具 举报
本帖最后由 唐见 于 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();
}
}
回复 使用道具 举报

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
又学习了一次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马