黑马程序员技术交流社区

标题: JavaSE第二阶段day11 多线程笔记 [打印本页]

作者: 学习让我快乐啊    时间: 2018-4-23 17:07
标题: JavaSE第二阶段day11 多线程笔记
本帖最后由 小石姐姐 于 2018-4-26 10:47 编辑

多线程课程笔记


                       +---------------------------+
                       |            阻塞            |
                        +--v----------------------^-+
                           |                      |
                           |解除阻塞          被阻塞|
      new                   |                      |
    +------+             +--v---+               +--^---+               +------+
    |      |   start()   |       >-------------->      |  线程执行结束   |      |
    | 创建  >------------>  就绪 |     CPU调度    | 运行 >---------------> 销毁  |
    |      |             |       <--------------<      |               |      |
    +------+             +------+               +------+               +------+
    ```

    **线程之间的通信**

    - 使用`Object`类的成员方法
      - `void wait()`: 使当前线程处于等待状态, 并且会立刻释放锁
      - `void notify()`: 随机唤醒一个处于等待状态的线程
      - `void notifyAll()`: 唤醒所有处于等待状态的线程
      - 注意: **这三个方法必须在同步代码块中, 且只能用锁对象来调用, 否则会抛异常**
    - `sleep()`和`wait()`的区别
      - sleep
        - 让当前线程在指定时间内睡眠, 时间结束后继续执行
        - 是Thread类的静态方法
        - 不会释放锁
      - wait
        - 让当前线程等待, 直到有人唤醒
        - 是Object类的非静态方法
        - 等待会立刻释放锁


作者: Yin灬Yan    时间: 2018-4-24 13:31
我来占层楼啊   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2