zoukankan      html  css  js  c++  java
  • Java多线程-线程状态

    从网上看到的线程的六种状态图,很清晰地展示了各个状态之间的切换以及可能的方法。

    • BLOCKED和WAITING的区别

      BLOCKED: 一般指的是被动阻塞,比如一个线程在synrhonized同步代码块外尝试获取锁时的阻塞;

      WAITING: 一般指的是主动进入等待状态,比如调用sleep,wait等方法。

      

    • 中断线程的方法

      1.   调用threadObject.interrupt(), 立即将调用该方法的线程中断状态设置为true;
      2.   调用ExecutorService.shutdown(), 将闲置的线程中断状态设置为true,正在运行的线程不改变其中断状态;
      3.   调用ExecutorService.shutdownNow(), 将线程池中的所有线程无论是否正在运行,中断状态都设置为true;
      4.       使用ExecutorService.submit()方法,返回Future<?>, 使用Future.cancel(true)方法, 比起shutdownNow()方法,这种方法可以精细地对每个单独的线程做处理 
    • 中断线程Interrupt

      由上可知,中断线程实际就是给线程设置一个中断标志而已,但是不同状态下的线程表现不同:

      1.   调用sleep()方法处于等待中的线程,如果被设置中断,线程中断并抛出InterruptedException异常
      2.   调用wait()方法处于等待中的线程,如果被设置中断,线程中断并抛出InterruptedException异常
      3.   synchronized同步代码块外等待获取锁的线程,如果被设置中断,线程不会中断,不会抛出异常
      4.       ReentrantLock.lockInterruptibly()方法阻塞的的线程,如果被设置中断,线程中断并抛出InterruptedException异常
      5.   I/O流等待输入或者输出的线程, 如果被设置中断,不会抛出异常

      基于上述不同阻塞状态的线程被设置中断的不同反应,如果线程发生死锁或者没有关闭I/O释放线程资源,那么该线程将会一直无法结束dead,所以,我们在使用完I/O流进行close非常重要!

  • 相关阅读:
    中介者模式
    Redis安装
    观察者模式
    第三天:创建型模式--建造者模式
    第二天:创建型模式--抽象工厂模式
    第一天:创建型模式--工厂方法模式
    17天17个Python设计模式--目录
    Python模拟登陆新版知乎
    Flask架站基础篇(八)--SQLAlchemy(2)
    Flask架站基础篇(七)--SQLAlchemy(1)
  • 原文地址:https://www.cnblogs.com/yxlaisj/p/12193781.html
Copyright © 2011-2022 走看看