Java中的线程

在 Java 中,线程是程序执行的最小单元,它被包含在进程之中.是进程中的实际运作单位,允许程序并发执行多个任务,提高系统资源的利用率;比如.如果一个线程完成一个任务要 100 毫秒.那么用十个线程完成改任务只需 10 毫秒。Java 提供了多种方式来创建和管理线程,同时也提供了丰富的 API 来处理线程间的同步、通信和调度。

线程和进程的区别

线程是进程的子集.一个进程可以有很多线程.每条线程并行执行不同的任务。
不同的进程使用不同的内存空间.而所有的线程共享一片相同的内存空间。每个线
程都拥有单独的栈内存用来存储本地数据

创建线程的方式

1. 继承 Thread 类
class MyThread extends Thread {
    public void run() {
        // 线程执行的任务
    }
}

// 创建并启动线程
MyThread thread = new MyThread();
thread.start();
2. 实现 Runnable 接口
class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的任务
    }
}

// 创建 Runnable 实例并作为参数传递给 Thread 对象
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();

线程状态

  • NEW(新建):线程被创建但未启动。
  • RUNNABLE(就绪):等待 CPU 时间片段,可以运行。
  • BLOCKED(阻塞):等待获取锁或其他条件。
  • WAITING(等待):无限期等待其他线程的通知。
  • TIMED_WAITING(定时等待):带有超时时间的等待状态。
  • TERMINATED(终止):线程执行完毕或因异常退出。

线程方法和操作

  • start():启动线程,调用 run() 方法执行任务。
  • join():等待线程终止。
  • sleep():线程休眠一段时间。
  • yield():让出 CPU 时间,使同优先级线程有机会执行。
  • interrupt():中断线程的执行。
  • isAlive():检查线程是否存活。
  • setPriority()getPriority():设置和获取线程优先级。

线程同步与互斥

  • synchronized 关键字:确保多个线程对共享资源的安全访问。
  • wait()notify()notifyAll():用于线程间的通信和同步。

线程池

java.util.concurrent.ExecutorService 管理线程池,提供对线程的复用、调度和管理。

并发编程工具

java.util.concurrent 包提供 LockSemaphoreCountDownLatch 等工具类,处理并发编程中的同步和线程间通信问题。

线程安全与注意事项

多线程编程需要注意线程安全性、资源共享、死锁等问题,并遵循最佳实践以确保程序的正确性和性能。对共享资源的访问需要进行合适的同步控制,避免出现竞态条件和数据不一致的情况。

Java 提供的并发包

Java 并发包 (java.util.concurrent) 提供了各种工具和类来简化并发编程,包括线程池、同步器、原子变量、阻塞队列等,可以更方便地实现高效、安全的多线程应用程序。

你可能感兴趣的:(Java,Java面试题汇总,后端,java,开发语言)