用卖火车票的例子来说明
package com;
class MyThread extends Thread{
private int ticketsCont=5;
private String name;
public MyThread(String name){
this.name=name;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(ticketsCont>0){
ticketsCont--;
System.out.println(name+"卖了1张票,剩余票数为:"+ticketsCont);
}
}
}
public class TicketsThread {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread mt1=new MyThread("窗口1");
MyThread mt2=new MyThread("窗口2");
MyThread mt3=new MyThread("窗口3");
mt1.start();
mt2.start();
mt3.start();
}
}
package test;
class MyThread implements Runnable{
private int ticketsCont=5;
@Override
public void run() {
// TODO Auto-generated method stub
while(ticketsCont>0){
ticketsCont--;
System.out.println(Thread.currentThread().getName()+"卖了1张票,剩余票数为:"+ticketsCont);
}
}
}
public class TicketsRunnable {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread mt=new MyThread();
Thread td1=new Thread(mt,"窗口1");
Thread td2=new Thread(mt,"窗口2");
Thread td3=new Thread(mt,"窗口3");
td1.start();
td2.start();
td3.start();
}
}
总结:Thread中有start() 所以如果是继承thread的话,那个类可以直接创建线程,调用start()
而Runnable中无start() 所以不能调用此方法,因此需要使用thread创建线程对象
Runnable适用于多个线程处理同一资源