建立執行緒的第二種方法:實現Runnable介面
package thread;
public class ThreadDemo3 {
/**
* @執行緒示例:
* 需求:簡單的賣票程式。
* 多個視窗賣票。
*
* 建立執行緒的第二種方式:實現Runnable介面
*
* 步驟:
* 1,定義類實現Runnable介面
* //class Ticket implements Runnable
*
* 2,覆蓋Runnable介面中的run方法。
* 將執行緒要執行的程式碼存放在該run方法總。
* //public void run(){}
*
* 3,通過Thread建立執行緒物件
* Ticket t = new Ticket();
*
* 4,將Runnable介面中的子類物件作為實際引數傳遞給Thread類的建構函式。
* Thread t1 = new Thread(t);
*
* 為什麼要將Runnable介面的子類物件傳遞給Thread的建構函式。
* 因為,自定義的run方法所屬的物件是Runnbale介面的子類物件。
* 所以要讓多執行緒去指定指定物件的run方法。
* 5,呼叫Thread類的start方法開啟執行緒並呼叫Runable介面子類的run方法。
* t1.start();
*
* 建立執行緒的兩種方式:繼承方式和實現方式的區別
* 1.實現方式好處:避免了單繼承的侷限性。
* 在定義執行緒時,建議使用實現方式。
* 2.繼承Thread:執行緒程式碼存放在Thread子類run方法中。
* 實現Runnable:執行緒程式碼存放在介面子類的run方法中。
*
* 在此例中,總票數被獨立出來了。
*
*
*
*/
public static void main(String[] args) {
/*繼承Thread的run方法的呼叫
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
*/
//實現Runnable介面
Ticket t = new Ticket();
Thread t1 = new Thread(t);//建立了一個執行緒
Thread t2 = new Thread(t);//建立了一個執行緒
Thread t3 = new Thread(t);//建立了一個執行緒
Thread t4 = new Thread(t);//建立了一個執行緒
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class Ticket implements Runnable//extends Thread
{
private int tick = 100;
public void run(){
while(true){
if(tick>0){
System.out.println(Thread.currentThread().getName()+"sale : "+ tick--);
}
}
}
}