多线程知识细节梳理

1.创建多线程2种方式
1.继承Thread
2.实现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张票,剩余票数为:"+ticketsCount);
    }
}

}
public class TicketsThread {
public static void main(String[] args){
//创建3个线程 模拟三个窗口卖票
MyThread mt1 = new MyThread("窗口1");
MyThread mt2 = new MyThread("窗口2");
MyThread mt3 = new MyThread("窗口3");

    //启动这三个线程 ,也即是窗口 ,开始卖票
    mt1.start();
    mt2.start();
    mt3.start();
}

}

3.实现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张票,剩余票数为:"+ticketsCount);
}
}
}

public class TicketsRunnable {
public static void main(String[] args){
MyThreadRunnable mt = new MyThreadRunnable();
//创建三个线程 来模拟 三个售票窗口
Thread th1 = new Thread(mt,"窗口1");
Thread th2 = new Thread(mt,"窗口2");
Thread th3 = new Thread(mt,"窗口3");

    //启动这三个线程 也即是三个窗口开始卖票
    th1.start();
    th2.start();
    th3.start();
    //线程生命周期 创建-就绪 -阻塞-运行状态-终止状态
}

}

4.生命周期流程图


多线程知识细节梳理_第1张图片
image.png

知识细节:
当多线程创建 后执行start 就会进入就绪状态 不一定马上执行 主要看有没有cpu资源
如果有马上执行 就会进入运行状态 运行完成 就会进入终止状态
如果调用sleep 就会进入阻塞状态 让出cpu资源 让其他线程执行 如果sleep阻塞结束 该线程就会进入就绪状态 重新获取cpu资源

你可能感兴趣的:(多线程知识细节梳理)