Loading... ## 方法1 继承Thread。重写run方法,调用start开启线程。 * 子类继承Thread类具备多线程能力 * 启动线程:子类对象.start() * 不建议使用:避免OOP单继承局限性。 ```java // 线程开启,不是立即执行的,可能会有延迟,由系统调度。 public class TestThread1 extends Thread{ @Override public void run() { for (int i = 0; i <20; i++) { System.out.println("新线程在执行---" + i); } } public static void main(String[] args) { // main线程,主线程 // 创建一个线程对象 TestThread1 thread1 = new TestThread1(); thread1.start(); for (int i = 0; i <2000; i++) { System.out.println("主线程在执行---" + i + "--------"); } } } ``` --- ## 方法2 实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法 * 实现接口Runnable具有多线程能力 * 启动线程:传入目标对象 + Thread对象.start() * 推荐使用:避免单继承局限性,灵活方便,**方便同一个对象被多个线程使用,多个线程由此可以公用一些资源** ```java public class TestThread3 implements Runnable{ // 线程开启,不是立即执行的,可能会有延迟,由系统调度。 public void run() { for (int i = 0; i < 20; i++) { System.out.println("新线程在执行---" + i); } } public static void main(String[] args) { // main线程,主线程 // 创建一个线程对象 TestThread3 t3 = new TestThread3(); // Thread thread = new Thread(t3); // thread.start(); new Thread(t3).start(); for (int i = 0; i < 2000; i++) { System.out.println("主线程在执行---" + i + "--------"); } } } ``` --- ## 方法3 实现Callable接口 1. 实现Callable接口需要返回值类型 2. 重写call方法,需要抛出异常 3. 创建目标对象 4. 创建执行服务: ExecutorService ser = Executors.newFixedThreadPool(1); 5. 提交执行: Future<Boolean> result1 = ser.submit(t1); 6. 获取结果: boolean r1 = result1.get(); 7. 关闭服务:ser.shutdownNow(); 最后修改:2020 年 08 月 06 日 01 : 05 PM © 允许规范转载