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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM张勇 高级黑马   /  2013-4-9 11:27  /  1253 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM张勇 于 2013-4-9 20:57 编辑

上次看了版主和编辑的帖子,不及时结贴就会被扣分,好害怕扣技术分。我是在网吧上网,版主和编辑觉得可以结贴,望帮忙结贴,我上线的时间不是很多,辛苦版主和编辑了!

多线程的一个小问题,想不明白。
  1. class Ticket implements Runnable
  2. {
  3.         private int tick = 100;
  4.         public void run()
  5.         {
  6.                 while (true)
  7.                 {
  8.                         if (tick>0)
  9.                         {
  10.                                 System.out.println(Thread.currentThread().getName()+"....sale:"+tick--);//不明白Thread.currentThread().getName()什么意思?
  11.                         }
  12.                 }
  13.         }
  14. }

  15. class TicketDemo
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Ticket t = new Ticket();//为什么要建立这个对象?

  20.                 Thread t1 = new Thread(t);//不明白new Thread(t)括号中的t是什么意思?
  21.                 Thread t2 = new Thread(t);
  22.                 Thread t3 = new Thread(t);
  23.                 Thread t4 = new Thread(t);

  24.                 t1.start();
  25.                 t2.start();
  26.                 t3.start();
  27.                 t4.start();
  28.         }
  29. }
复制代码
问题1:
System.out.println(Thread.currentThread().getName()+"....sale:"+tick--);
不明白Thread.currentThread().getName()什么意思?

问题2:
Ticket t = new Ticket();//为什么要建立这个对象?
Thread t1 = new Thread(t);//不明白new Thread(t)括号中的t是什么意思?
想不明白括号里的t是咋回事。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
1.Thread.currentThread().getName(); 表示获得当前线程的名称。

2.Ticket t = new Ticket() 这里建立一个Ticket对象 是因为线程的run方法在这个类中,如果没有这个对象,如何开启线程,如何对这个对象中的变量(tickets)的实例进行操作?

Thread t1 = new Thread(t); 中的t 是说明这是t的线程,操作的是t中的  变量(tickets)实例。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. 问题1:
  2. System.out.println(Thread.currentThread().getName()+"....sale:"+tick--);
  3. 不明白Thread.currentThread().getName()什么意思?
  4. 这个是一个线程内的方法,返回原是一个线程对象,然后再调用它的getName()方法返回线程当前的名称。
  5. 问题2:
  6. Ticket t = new Ticket();//为什么要建立这个对象?
  7. Thread t1 = new Thread(t);//不明白new Thread(t)括号中的t是什么意思?
复制代码
因为是继承了Rnnable接口,所以线程要明确启动线程的执行方法体run在哪个类里,所以把实现了Runnable接口的类当作Thread对象的构造参数传递进来。
这样就知道要启动线程运行的哪个run方法了。
还有版主人都很不错的,只会提醒你,只要个人稍微主动一点,就没有关系,其实通过手机也可以进行这些结帖操作的。对这些不要过多担心。
还有个人建议,看你似乎只学到多线程,前面还有很多的课程没有学。所以技术分这一块,不用过多担心。
回复 使用道具 举报
楼上两位说的差不多了
回复 使用道具 举报
Thread.currentThread():获取当前线程对象。
getName():获取线程名称
不明白new Thread(t)括号中的t是什么意思?因为自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去指定指定对象的run方法,就必须明确run
方法所属对象。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马