实现多线程的方式

  1. 继承 Thread 类,重写 run 方法,调用 start 方法;
  2. 实现 Runnable 接口,重写 run 方法,调用 start 方法;
  3. 实现 Callable接口,重写 call 方法,并使用 FutureTask 配合完成有返回值多线程 ;
  4. 基于线程池

    1.继承 Thread 类

    核心类 ```java package top.simba1949.multi.thread;

/**

  • @author SIMBA1949
  • @date 2020/10/19 23:13 / public class MultiThreadOne extends Thread{ /*
    • 实现多线程的第一种方式,extend Thread,重写 run 方法 */ @Override public void run() { Thread thread = Thread.currentThread(); System.out.println(“threadName=” + thread.getName()); } } 调用方式java package top.simba1949;

import top.simba1949.multi.thread.MultiThreadOne;

/**

  • @author SIMBA1949
  • @date 2020/10/19 23:22 */ public class Application { public static void main(String[] args) {
    1. MultiThreadOne multiThreadOne = new MultiThreadOne();
    2. multiThreadOne.start();
    } } ```

    2.实现 Runnable 接口

    基础实现

    核心类 ```java package top.simba1949.multi.thread;

/**

  • @author SIMBA1949
  • @date 2020/10/19 23:25 / public class MultiThreadTwo implements Runnable{ /*
    • 实现多线程的第二种方式,实现 Runnable,重写 run 方法 */ @Override public void run() { Thread thread = Thread.currentThread(); System.out.println(“threadName=” + thread.getName()); } } 调用方式java package top.simba1949;

import top.simba1949.multi.thread.MultiThreadTwo;

/**

  • @author SIMBA1949
  • @date 2020/10/19 23:22 */ public class Application { public static void main(String[] args) {
    1. MultiThreadTwo multiThreadTwo = new MultiThreadTwo();
    2. Thread thread = new Thread(multiThreadTwo);
    3. thread.start();
    } } ```

    匿名内部类

    核心类与调用方式 ```java package top.simba1949;

/**

  • @author SIMBA1949
  • @date 2020/10/19 23:22 */ public class Application { public static void main(String[] args) {
    1. // 使用匿名内部类
    2. new Thread(new Runnable() {
    3. @Override
    4. public void run() {
    5. Thread innerThread = Thread.currentThread();
    6. System.out.println("threadName=" + innerThread.getName());
    7. }
    8. }).start();
    } } ```

    lambda表达式

    核心类与调用方式 ```java package top.simba1949;

/**

  • @author SIMBA1949
  • @date 2020/10/19 23:22 */ public class Application { public static void main(String[] args) {
    1. // 使用 lambda 表达式
    2. new Thread(() -> {
    3. Thread innerThread = Thread.currentThread();
    4. System.out.println("threadName=" + innerThread.getName());
    5. }).start();
    } } ```

    3.实现 Callable接口

    核心类 ```java package top.simba1949.multi.thread;

import java.util.concurrent.Callable;

/**

  • @author SIMBA1949
  • @date 2020/10/19 23:44 */ public class MultiThreadThree implements Callable { @Override public String call() throws Exception {
    1. Thread thread = Thread.currentThread();
    2. System.out.println("threadName=" + thread.getName());
    3. return thread.getName();
    } } 调用方式java package top.simba1949;

import top.simba1949.multi.thread.MultiThreadThree;

import java.util.concurrent.FutureTask;

/**

  • @author SIMBA1949
  • @date 2020/10/19 23:22 */ public class Application { public static void main(String[] args) throws Exception {
    1. // 创建自定义线程
    2. MultiThreadThree multiThreadThree = new MultiThreadThree();
    3. // FutureTask接收自定义线程
    4. FutureTask<String> futureTask = new FutureTask<>(multiThreadThree);
    5. // 调用 thread.start 启动线程
    6. new Thread(futureTask).start();
    7. // 获取线程的返回结果
    8. String result = futureTask.get();
    9. System.out.println(result);
    } } ```

    4.基于线程池

    ```java package top.simba1949;

import java.util.concurrent.*;

/**

  • @author anthony
  • @date 2022/1/26 */ public class App { public static void main(String[] args) {
    1. // 创建线程池
    2. ExecutorService threadPool = Executors.newFixedThreadPool(10);
    3. while (true) {
    4. threadPool.execute(new Runnable() {
    5. @Override
    6. public void run() {
    7. System.out.println(Thread.currentThread().getName() + " is running ..");
    8. try {
    9. Thread.sleep(3000);
    10. } catch (InterruptedException e) {
    11. e.printStackTrace();
    12. }
    13. }
    14. });
    15. }
    } } ```