两种创建线程方式的区别
继承 Thread 类Thread 子类// 1. 继承Thread类重写run()class MyThread extends Thread {private int ticket 10;Override public void run() { for (int i 0; i 10; i) { if (ticket 0) { System.out.println(Thread.currentThread().getName() 卖出第 ticket-- 张票); } } }}public class ThreadDemo {public static void main(String[] args) {// 两个独立线程各自拥有10张票资源不共享MyThread t1 new MyThread();MyThread t2 new MyThread();t1.setName(“窗口1”);t2.setName(“窗口2”);t1.start();t2.start();}}实现 Runnable 接口// 任务类实现Runnable仅封装业务逻辑class SellTicketRunnable implements Runnable {// 共享资源多个线程共用同一个对象时共用该变量private int ticket 10;Override public void run() { while (true) { // 同步锁防止多线程并发超卖 synchronized (this) { if (ticket 0) { System.out.println(Thread.currentThread().getName() 卖出第 ticket 张票); ticket--; } else { System.out.println(所有票已售空); break; } } } }}public class TestRunnableImpl {public static void main(String[] args) {// 同一个任务实例传给多个Thread共享10张票SellTicketRunnable ticketTask new SellTicketRunnable();Thread window1 new Thread(ticketTask, 窗口1); Thread window2 new Thread(ticketTask, 窗口2); window1.start(); window2.start(); }}