方法一:
public class SellTicket extends Thread {
private static int tickets=1000;
public void run(){
while(tickets>0){
System.out.println(currentThread().getName()+"sell:"+tickets);
tickets--;
}
}
}
SellTicket sellTicket1=new SellTicket();
SellTicket sellTicket2=new SellTicket();
SellTicket sellTicket3=new SellTicket();
sellTicket1.start();
sellTicket2.start();
sellTicket3.start();
方法二:
public class SellTicketRun implements Runnable {
private int tickets=1000;
Object obj=new Object();
@Override
public void run() {
while(tickets>0){
//同步代碼塊
synchronized (obj) {
if(tickets>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"sell:"+tickets);
tickets--;
}
}
}
}
}
SellTicketRun sellTicketRun=new SellTicketRun();
Thread th1=new Thread(sellTicketRun);
Thread th2=new Thread(sellTicketRun);
Thread th3=new Thread(sellTicketRun);
th1.start();
th2.start();
th3.start();
多線程繼承Thread和實現runnable方式的區別:避免單繼承的侷限性,
繼承Thread:線程代碼存放Thread子類run方法中,
實現runnable:線程方法存放在接口的子類的run方法中