线程的基本语法
发布日期:2021-05-14 16:55:56 浏览次数:21 分类:精选文章

本文共 1675 字,大约阅读时间需要 5 分钟。

线程的基础知识与编程实践

线程与进程是操作系统中最基本的执行单位,理解它们的关系是掌握多线程编程的核心。进程是资源分配和调度的最小单位,而线程则是在同一个进程中执行任务的轻量级单位。程序运行时,计算机会通过切换线程来分配资源,时间片非常短,因此看起来 program 一直在运行。

多个进程之间的资源不会共享,但多个线程属于同一个进程,线程之间可以共享资源。多线程编程虽能提升效率,但也需要考虑线程切换带来的开销,可能并不比单线程效率更高。


线程的创建方式

通过继承 Thread 类

  • 定义一个类继承 Thread:
    public class MyThread extends Thread {    @Override    public void run() {        // 可以执行一些任务    }}
  • 启动线程:
    MyThread thread = new MyThread();thread.start();
  • 通过实现 Runnable 接口

  • 定义一个类实现 Runnable:
    public class MyRunnable implements Runnable {    @Override    public void run() {        // 可以执行一些任务    }}
  • 创建线程:
    Thread thread = new Thread(new MyRunnable());thread.start();
  • 使用 Callable 和 Future

  • 从 Java 8 开始,可以使用 Lambda 表达式直接创建 Callable:
    Callable
    callable = () -> { // 执行任务并返回结果 return null;};
  • 使用 FutureTask 实现线程:
    FutureTask
    task = 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 线程编程知识,熟悉这些内容是后续多线程开发的基石。

    上一篇:数据结构
    下一篇:常用类及异常处理

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月22日 14时57分57秒