1)繼承Thread:
public class ThreadTest extends Thread
{
private int count;
private String name;
public ThreadTest(int count,String name){
this.count = count;
this.name = name;
}
public void run()
{
while(count>0)
{
System.out.println(name+"買票 "+count--);
}
}
public static void main(String []args)
{
ThreadTest t1 = new ThreadTest(10,"1號窗口");
ThreadTest t2 = new ThreadTest(10,"2號窗口");
t1.start();
t2.start();
}
}
運行結果:
1號窗口買票 10
1號窗口買票 9
1號窗口買票 8
2號窗口買票 10
1號窗口買票 7
2號窗口買票 9
1號窗口買票 6
2號窗口買票 8
1號窗口買票 5
2號窗口買票 7
1號窗口買票 4
2號窗口買票 6
1號窗口買票 3
2號窗口買票 5
1號窗口買票 2
2號窗口買票 4
1號窗口買票 1
2號窗口買票 3
2號窗口買票 2
2號窗口買票 1
2)實現Runnable接口
public class hello implements Runnable{
private int ticket=19;
@Override
public void run() {
for(int i=0;i<20;i++){
if(this.ticket >0){
System.out.println(Thread.currentThread().getName()+"正在買票"+this.ticket--);
}
}
}
public static void main(String[] args){
hello h1 = new hello();
new Thread(h1,"3號窗口").start();
new Thread(h1,"1號窗口").start();
new Thread(h1,"2號窗口").start();
}
}
運行結果:
1號窗口正在買票19
2號窗口正在買票18
3號窗口正在買票19
2號窗口正在買票16
1號窗口正在買票17
2號窗口正在買票14
3號窗口正在買票15
2號窗口正在買票12
1號窗口正在買票13
2號窗口正在買票10
3號窗口正在買票11
2號窗口正在買票8
1號窗口正在買票9
2號窗口正在買票6
3號窗口正在買票7
2號窗口正在買票4
1號窗口正在買票5
2號窗口正在買票2
3號窗口正在買票3
1號窗口正在買票1
從上面的運行結果可以看出:繼承Thread實現的模式是 定義多個線程,各自完成各自的任務. 實現Runnable實現的模式是 定義多個線程,實現一個任務.
其實在實現一個任務用多個線程來做也可以用繼承Thread類來實現只是比較麻煩,一般我們用實現Runnable接口來實現,簡潔明了。
大多數情況下,如果只想重寫 run() 方法,而不重寫其他 Thread 方法,那么應使用 Runnable 接口。
