
线程的基本语法
定义一个类继承 Thread: 启动线程: 定义一个类实现 Runnable: 创建线程: 从 Java 8 开始,可以使用 Lambda 表达式直接创建 Callable: 使用 FutureTask 实现线程: 获取结果:
设置线程名称: 获取线程名称: 获取当前线程:
发布日期:2021-05-14 16:55:56
浏览次数:21
分类:精选文章
本文共 1675 字,大约阅读时间需要 5 分钟。
线程的基础知识与编程实践
线程与进程是操作系统中最基本的执行单位,理解它们的关系是掌握多线程编程的核心。进程是资源分配和调度的最小单位,而线程则是在同一个进程中执行任务的轻量级单位。程序运行时,计算机会通过切换线程来分配资源,时间片非常短,因此看起来 program 一直在运行。
多个进程之间的资源不会共享,但多个线程属于同一个进程,线程之间可以共享资源。多线程编程虽能提升效率,但也需要考虑线程切换带来的开销,可能并不比单线程效率更高。
线程的创建方式
通过继承 Thread 类
public class MyThread extends Thread { @Override public void run() { // 可以执行一些任务 }}
MyThread thread = new MyThread();thread.start();
通过实现 Runnable 接口
public class MyRunnable implements Runnable { @Override public void run() { // 可以执行一些任务 }}
Thread thread = new Thread(new MyRunnable());thread.start();
使用 Callable 和 Future
Callablecallable = () -> { // 执行任务并返回结果 return null;};
FutureTasktask = new FutureTask<>(callable);Thread thread = new Thread(task, "有返回值的线程");thread.start();
try { Integer result = task.get(); System.out.println("子线程的返回值:" + result);} catch (Exception e) { e.printStackTrace();}
区别与比较
- 继承 Thread 类:只能实现单继承,适合简单的线程创建。
- 实现 Runnable 接口:支持多实现,扩展性更高,适合更复杂的线程任务。
常用线程方法
thread.setName("我的线程");
thread.getName();
Thread.currentThread();
线程安全问题
多线程程序需要处理共享资源时的线程安全问题。常见的做法包括同步和加锁。
使用 Synchronize
- 同步方法:
public synchronized void run() { // 来说 synchronized 的线程安全代码}
- 同步代码块:
synchronized (SafeThread.class) { // 可以访问 shared 资源}
使用 ReentrantLock
- 加锁代码:
lock.lock();try { // 核心代码} finally { lock.unlock();}
- 代码结构应放在 try-catch-finally 组合中。
线程休眠与状态
Thread.sleep(1000L); // 让当前线程休眠 1 秒
常见线程状态
- 创建:线程启动前。
- 就绪:线程获取到 CPU 时间片后。
- 执行:线程正在运行。
- 阻塞:线程被暂停(比如等待 I/O)。
- 死亡:线程完成或被终止。
这就是基础的 Java 线程编程知识,熟悉这些内容是后续多线程开发的基石。