1.創(chuàng)建多線程2種方式
1.繼承Thread
2.實現(xiàn)Runnable 接口
2.繼承Thread用法
class MyThread extends Thread{
private int ticketsCount= 5;//一共5張火車票
private String name;// 窗口 也是線程名字
public MyThread(String name){
this.name = name;
}
@Override
public void run() {
while (ticketsCount > 0){
ticketsCount--; //如果還有票 就賣掉一張
System.out.println(name+"賣了1張票篷店,剩余票數(shù)為:"+ticketsCount);
}
}
}
public class TicketsThread {
public static void main(String[] args){
//創(chuàng)建3個線程 模擬三個窗口賣票
MyThread mt1 = new MyThread("窗口1");
MyThread mt2 = new MyThread("窗口2");
MyThread mt3 = new MyThread("窗口3");
//啟動這三個線程 ,也即是窗口 ,開始賣票
mt1.start();
mt2.start();
mt3.start();
}
}
3.實現(xiàn)Runnable用法
class MyThreadRunnable implements Runnable {
private int ticketsCount = 5 ;//一共5張火車票
@Override
public void run() {
while (ticketsCount > 0){
ticketsCount--;//如果還有票 就賣掉一張
System.out.println(Thread.currentThread().getName()+"賣了1張票疲陕,剩余票數(shù)為:"+ticketsCount);
}
}
}
public class TicketsRunnable {
public static void main(String[] args){
MyThreadRunnable mt = new MyThreadRunnable();
//創(chuàng)建三個線程 來模擬 三個售票窗口
Thread th1 = new Thread(mt,"窗口1");
Thread th2 = new Thread(mt,"窗口2");
Thread th3 = new Thread(mt,"窗口3");
//啟動這三個線程 也即是三個窗口開始賣票
th1.start();
th2.start();
th3.start();
//線程生命周期 創(chuàng)建-就緒 -阻塞-運行狀態(tài)-終止?fàn)顟B(tài)
}
}
4.生命周期流程圖
知識細節(jié):
當(dāng)多線程創(chuàng)建 后執(zhí)行start 就會進入就緒狀態(tài) 不一定馬上執(zhí)行 主要看有沒有cpu資源
如果有馬上執(zhí)行 就會進入運行狀態(tài) 運行完成 就會進入終止?fàn)顟B(tài)
如果調(diào)用sleep 就會進入阻塞狀態(tài) 讓出cpu資源 讓其他線程執(zhí)行 如果sleep阻塞結(jié)束 該線程就會進入就緒狀態(tài) 重新獲取cpu資源