多线程实现方式

7 阅读1分钟

1. 继承Thread类,重写run方法:

class MyThread extends Thread {
    public void run() {
        // 线程执行的代码
    }
}

// 创建线程并启动
MyThread myThread = new MyThread();
myThread.start();

2. 实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target:

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的代码
    }
}

// 创建线程并启动
Thread myThread = new Thread(new MyRunnable());
myThread.start();

3. 通过Callable和FutureTask创建线程:

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

class MyCallable implements Callable<String> {
    public String call() throws Exception {
        // 线程执行的代码
        return "Callable result";
    }
}

// 创建FutureTask并传入Callable实例
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());

// 创建线程并启动
Thread myThread = new Thread(futureTask);
myThread.start();

// 获取线程执行结果
String result = futureTask.get();

4. 通过线程池创建线程:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的代码
    }
}

// 创建固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);

// 提交任务给线程池执行
executorService.submit(new MyRunnable());

// 关闭线程池
executorService.shutdown();

这些是Java中常见的多线程实现方式,选择合适的方式取决于具体的需求和场景。通常来说,实现Runnable接口更灵活,因为一个类可以同时实现多个接口,而继承Thread类则不具备这种灵活性。使用线程池可以更好地管理和控制线程,避免频繁创建和销毁线程所带来的性能开销。Callable和FutureTask的组合可以获取线程执行的结果。