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号窗口买票 91号窗口买票 82号窗口买票 101号窗口买票 72号窗口买票 91号窗口买票 62号窗口买票 81号窗口买票 52号窗口买票 71号窗口买票 42号窗口买票 61号窗口买票 32号窗口买票 51号窗口买票 22号窗口买票 41号窗口买票 12号窗口买票 32号窗口买票 22号窗口买票 12)实现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号窗口正在买票183号窗口正在买票192号窗口正在买票161号窗口正在买票172号窗口正在买票143号窗口正在买票152号窗口正在买票121号窗口正在买票132号窗口正在买票103号窗口正在买票112号窗口正在买票81号窗口正在买票92号窗口正在买票63号窗口正在买票72号窗口正在买票41号窗口正在买票52号窗口正在买票23号窗口正在买票31号窗口正在买票1
从上面的运行结果可以看出:继承Thread实现的模式是 定义多个线程,各自完成各自的任务. 实现Runnable实现的模式是 定义多个线程,实现一个任务.
其实在实现一个任务用多个线程来做也可以用继承Thread类来实现只是比较麻烦,一般我们用实现Runnable接口来实现,简洁明了。
大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。