1. 实现Runnable接口
    2. 重写run方法 将要执行的操作卸载run方法中
    3. 创建实现Runnable接口的类对象
    4. 创建Thread对象 将Runnable接口对象作为构造参数传递给Thread
    5. 使用Thread对象调用start方法
    6. 存在线程安全问题 ```java

    /**

    • 创建人:LYY
    • 创建时间:2022/4/26
    • 模拟售票
    • 同100张车票 同时多个线程抢票
    • 每个线程执行一次 当前票数减一 */

    // 1. 实现Runnable接口 public class Ticket implements Runnable{

    1. private int count = 100;
    2. @Override
    3. public void run() {
    4. // 2. 将要执行的操作 卸载run方法中
    5. while (count > 0) {
    6. System.out.println(Thread.currentThread().getName()+ "count = "+count);
    7. count--;
    8. }
    9. }

    }

    class TicketTest{

    1. @Test
    2. public void ticketTest() {
    3. // 3. 创建Runnable接口实现类的对象
    4. Ticket ticket = new Ticket();
    5. // 4. 将Runnable接口实现类的对象作为参数 传递给Thread对象 创建线程
    6. // 创建线程1
    7. Thread t1 = new Thread(ticket);
    8. t1.setName("线程一:");
    9. // 创建线程2
    10. Thread t2 = new Thread(ticket);
    11. t2.setName("线程二:");
    12. // 创建线程3
    13. Thread t3 = new Thread(ticket);
    14. t3.setName("线程三:");
    15. t3.start();
    16. t1.start();
    17. t2.start();
    18. }

    } ```