java线程--一网打尽
发布日期:2021-05-10 04:59:19 浏览次数:25 分类:精选文章

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

概述

进程与线程是操作系统中用来描述和管理多任务执行的核心概念。在现代操作系统中,通常一个程序对应一个进程,而进程内部可以包含多个线程。每个线程都能独立运行并分享父进程的资源。

进程的特点

  • 独立性:进程是一个独立的实体,拥有自己的地址空间和系统资源。
  • 动态性:进程有自己的生命周期和状态,可以在不同时间执行不同的任务。
  • 并发性:多个进程可以在多核或多处理器上并行执行。
  • 线程的特点

    线程是进程的一个组成部分,一个线程可以共享父进程的资源,并在并发执行中协作完成任务。

    线程的创建与使用

    在Java中,线程可以通过Thread类直接操作或通过Runnable接口实现。Thread类的构造方法主要有两种:

    • 直接继承Thread类并重写run方法

      class MyThread extends Thread {
      public void run() {
      // 定义线程执行的逻辑
      }
      }
    • 通过Runnable接口实现并由Thread类操作

      class MyRunnable implements Runnable {
      public void run() {
      // 定义线程执行的逻辑
      }
      }
      Thread thread = new Thread(new MyRunnable());
      thread.start();

    start()方法启动线程,Java虚拟机会调度线程的run()方法进行执行。 Marketable’s共享内存和减少创建新线程的开销,大大提高并发性能。

    线程的状态

    Java中线程有五种状态,每个线程在任意时刻只能处于其中一种状态:

  • 新建(New):线程刚刚被创建。
  • 就绪(Runnable):线程准备好执行,但尚未获取CPU资源。
  • 运行(Running):线程获取CPU资源正在执行。
  • 阻塞(Blocked):线程因等待IO、Sleep或其他同步操作而进入阻塞状态。
  • 结束(Terminated):线程执行完毕或因异常退出。
  • 控制线程的方法

  • Wait/Notify/NotifyAll:线程等待某一对象的状态改变,其他线程可以通过 notify系列方法唤醒。
  • Sleep:线程暂停一段时间,释放CPU资源给其他线程。
  • Yield:当前线程放弃CPU资源,允许其他线程(具有相同优先级)执行。
  • Join:线程等待另一个线程结束,适用于等待子线程完成的场景。
  • Interrupt:中断线程,线程可能抛出InterruptedException异常。
  • 线程中断

    线程中断是一种线程间协作机制,通过设置中断标志通知线程。interrupt()方法设置标志,isInterrupted()检测标志状态,interrupted()清除标志并返回状态。中断不立即终止线程,只有阻塞线程才能被唤醒。

    run()与start()的区别

    start()方法启动线程,负责将run()方法提交给虚拟机执行。调用run()方法则直接在当前线程上执行,无法创建新任务。因此,启动新线程必须使用start()方法,而不是直接调用run()

    联线程死锁

    线程死锁是指两个或多个线程因竞争资源而无法继续执行。死锁产生需要满足以下条件:

  • 互斥条件:资源只能一个线程占有。
  • 请求并持有条件:线程请求新资源时被阻塞。
  • 不可剥夺条件:资源在使用期间不能被其他线程占用。
  • 环路等待条件:资源形成一个循环依赖。
  • 避免死锁需打破请求并持有条件和环路等待条件,可通过设置最大等待时间、使用окрем锁或优化资源使用逻辑。

    用户线程与守护线程

    Java中,用户线程和守护线程(Daemon thread)分为两种:

    • 用户线程:保留到所有用户线程结束后,整个虚拟机进程结束。
    • 守护线程:即使用户线程结束,守护线程也继续运行,直到虚拟机退出。

    通过setDaemon(true)可以将线程设置为守护线程,适用于需要长时间运行的任务,如垃圾回收线程。

    上一篇:java多线程同步,线程安全--一网打尽
    下一篇:java垃圾回收

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月24日 02时29分04秒