DRAFT 多线程
约 404 字大约 1 分钟
2026-05-13
不同于 JavaScript ,Java 是多线程的。它提供了多线程编程的支持,使得一个程序在同一时间可以执行多个线程,提高程序执行效率。但在带来高性能的 同时,也带来如竞争条件、死锁等线程安全问题。
线程
共享与独立:同一个进程下的多个线程共享该进程的内存资源,但每个线程拥有自己独立的栈和程序计数器。 轻量级:线程的创建和切换成本远低于进程,操作系统以线程为单位通过分配时间片来轮流执行各个线程。
创建线程
Java 中有三种创建线程的方式:
- 继承 Thread 类
- 实现 Runnable 接口
- 实现 Callable 接口
继承 Thread 类
让类继承 Thead 类,并重写 run() 方法,然后使用实例调用 start() 方法启动线程。
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread running");
}
}
new MyThread().start();实现 Runnable 接口
实现 Runnable 接口中的 run() 方法,并将 Runnable 实例作为参数传递给 Thread 构造函数,调用 start() 方法启动线程。
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Thread running");
}
}
new Thread(new MyRunnable()).start();实现 Callable 接口
Callable 与 Runnable 类似,但 Callable 有返回值,且可以抛出异常。
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("Thread running");
return "Result";
}
}
// 使用
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
Thread thread = new Thread(futureTask);
thread.start();
// 获取返回值(会阻塞当前线程直到计算完成)
String result = futureTask.get();
System.out.println(result);线程安全
TODO: synchronized,JUC ,