1 public class ThreadDemo4
2 {
3 public static void main(String[] args)
4 {
5 ThreadTest tt=new ThreadTest();
6 new Thread(tt).start();
7 new Thread(tt).start();
8 new Thread(tt).start();
9 new Thread(tt).start();
10 }
11 }
12
13 class ThreadTest implements Runnable
14 {
15 private int tickets=100;
16 public void run()
17 {
18 while(true)
19 {
20 if(tickets>0)
21 System.out.println(Thread.currentThread().getName()+" is saling ticket "+tickets--);
22 }
23 }
24 }问:第五行只是定义了一个对象,为何6,7,8,9能启动四个线程?
2 {
3 public static void main(String[] args)
4 {
5 ThreadTest tt=new ThreadTest();
6 new Thread(tt).start();
7 new Thread(tt).start();
8 new Thread(tt).start();
9 new Thread(tt).start();
10 }
11 }
12
13 class ThreadTest implements Runnable
14 {
15 private int tickets=100;
16 public void run()
17 {
18 while(true)
19 {
20 if(tickets>0)
21 System.out.println(Thread.currentThread().getName()+" is saling ticket "+tickets--);
22 }
23 }
24 }问:第五行只是定义了一个对象,为何6,7,8,9能启动四个线程?
class Thread{
private Runnable r;
public Thread(Runnable r){
this.r = r;
}
public void run(){}
public void start(){
if (r != null){ //用new Thread(Runnable)产生线程运行Runnable的run方法
r.run();
}
else{ //用new MyThread()产生线程运行MyThread重载后的run方法
判断Thread初始化次数的代码,
如果未被初始化,则调用重载后的run方法
}
}
}
如上面的if...else...所示,对于new Thread(Runnable)这样构造的线程能产生多个相同的线程;而new MyThread()这样的只能启动一次,不能多次生成并启动线程.
你是定义了一个对象tt,但你的这个tt作为了构造参数.
你连续又new出了四个不同的Thread对象.
你的new Thread(tt).start();
其实是连续启动了具有相同内容的四个线程