zoukankan      html  css  js  c++  java
  • 线程的五个状态,sleep和wait

    线程的五个状态

    新建,就绪,执行,阻塞,死亡

    调用线程的start方法是创建了新的线程,在新的线程中执行。
    调用线程的run方法是在主线程中执行该方法,和调用普通方法一样

    线程死亡的原因:

    • run方法正常退出而自然死亡
    • 线程抛出一个未捕获的异常
    • 直接调用 了该线程的stop方法结束该线程(容易导致死锁的发生,不推荐使用stop方法)

    sleep()和wait()

    1)sleep()方法(调用sleep方法不要求持有任何锁,可以在任何地方使用)sleep方法是线程类(Thread)的方法,让线程进入一段指定时间的睡眠状态,让当前线程进入阻塞状态,在指定时间内不用系统给该线程分配执行时间片,让执行机会给其他线程,但是监控状态依然保持,到时会自动恢复。调用sleep方法不会释放对象锁。
    也就是当线程处于上锁时,sleep()方法不会释放对象锁,即睡眠时也有持有对象锁,只会让出CPU执行时间片,并不会释放同步资源锁。

    sleep()必须捕获异常,wait不需要抛出异常

    2)wait()方法(wait方法只能在同步方法或同步块中使用

    wait方法是Object类里面的方法,当线程执行wait方法时,会导致本线程释放对象锁,该线程进入等待此对象的等待池中(进入等待队列,阻塞的一种,叫等待阻塞),并让出CPU资源。只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
    等待线程只是被激活但是要获得对象锁之后才能继续往下执行。                    

  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/lhh666/p/11584032.html
Copyright © 2011-2022 走看看