键盘敲烂,年薪30万
线程的四种实现方式:
1. 继承Thread类
2. 实现Runnable接口
3. 实现Collable接口
4. 线程池获取线程
优点:
缺点:
注意:Thread是Runnable接口的一个实现类,相当于java为我们封装好的一个简单线程类
代码实现:
class MyThread extends Thread {
public void run() {
// 线程执行逻辑
}
}
// 创建并启动线程
MyThread myThread = new MyThread();
myThread.start();
优点:
缺点:
代码实现:
class MyRunnable implements Runnable {
public void run() {
// 线程执行逻辑
}
}
// 创建并启动线程
Thread myThread = new Thread(new MyRunnable());
myThread.start();
优点:
缺点:
代码实现:
class MyCallable implements Callable {
@Override
public Integer call() throws Exception {
int total = 0;
for (int i = 0; i <= 100; i++) {
total += i;
}
return total;
}
}
//创建线程任务
MyCallable myCallable = new MyCallable();
//管理结果
FutureTask integerFutureTask = new FutureTask(myCallable);
//创建线程
Thread thread = new Thread(integerFutureTask);
thread.start();
Integer ans = integerFutureTask.get();
System.out.println(ans);
创建线程池 - 提交任务 - 销毁线程池
优点:
代码实现:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池,大小为3
ExecutorService executorService = Executors.newFixedThreadPool(3);
// 提交任务给线程池执行
for (int i = 0; i < 5; i++) {
Runnable task = new MyTask(i);
executorService.submit(task);
}
// 关闭线程池
executorService.shutdown();
}
static class MyTask implements Runnable {
private int taskId;
public MyTask(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("Task ID : " + taskId + " is running on thread " + Thread.currentThread().getName());
}
}
}