并发知识(2)——关于Thread

一些容易混淆的知识点

  1. sleep vs wait

sleep是Thread,wait是Object方法

wait和notify只能在同步代码块中调用

wait释放锁资源,sleep不释放锁资源

唤醒条件:wait通过notify或者notifyAll,sleep超时或者调用interrupt方法

关于Thread

类定义:

class Thread implements Runnable

Java doc:

每个线程都有优先级,线程的优先级与创建它的线程的优先级一样,当然,如果创建它的线程是daemon则创建出来的也是daemon

当JVM启动时,通常有一个non-daemon线程——该线程会调用指定类的main方法。

JVM会一直执行线程除非遇到下面两种情况:

  1. Runtime类的exit方法被调用或安全管理器允许退出操作
  2. 所有非守护线程死亡,要么从对run方法的调用返回,要么抛出一个在run方法之外传播的异常

内部类State:

NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED

所以你看到的所有的状态转换,在Java文档里有写。。。

  • 优先级:最小1最大10 正常5
  • new Thread的时候默认名字“Thread-” 加上线程数量
  • Thread中有一个target,调用run的时候如果target != null则调用target的run方法
  • 退出之前会调用一下exit()方法
  • yield:告诉调度器处理器我暂时可以让给别的线程使用,调度器可以无视。很难正确使用,主要用于调试或测试。
  • sleep:The thread does not lose ownership of any monitors.
  • join:等待线程死亡,join(0)无限期等待

这里顺便看下Object的wait方法:The thread releases ownership of this monitor

posted @ 2019-08-02 20:30  Code&Fight  阅读(160)  评论(0编辑  收藏  举报