zoukankan      html  css  js  c++  java
  • java 线程 基础笔记2

    线程间通讯:

    多个线程在处理同一资源,但是人物却不同。

     等待/唤醒机制

    涉及的方法:

    1.wait(); 让线程处于冻结状态,被wait的线程会被存储到线程池中。

    2.notify();唤醒线程池中的一个线程(任意)。

    3.notifyaAll();唤醒线程池中的所有线程。

    这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法。

    必须要明确操作的是哪个锁上的线程。

    为什么操作线程的方法 wait  notify notifyAll 定义在了Object类中??

    因为这些方法是监视器的方法,监视器其实就是锁。

    锁可以是任意的对象,任意的对象调用的方式一定定义在Object类中。

    同步代码块对于锁的操作是隐式的。

    Lock接口:替代了同步代码块或者同步函数,将同步的隐式锁操作变成现实锁操作。

    同时更为灵活,可以一个锁上加多组监视器。

    lock();获取锁

    unlock();释放锁,通常需要定义在finally代码块中。

    Condition接口:出现代替了Object中的wait,notify,notifyAll方法。

    将这些监视器方法单独进行了封装,变成Condition监视器对象。

    可以任意锁进行组合。

    await();

    signal();

    signalAll();

    wait 和 sleep 区别?

    1.wait可以指定时间也可以不指定,sleep必须指定时间。

    2.在同步中时,对CPU的执行权和锁的处理不同。

      wait:释放执行权,释放锁。

      sleep:释放执行权,不释放锁。

    停止线程:

    1.stop方法

    不安全,已过时。

    2.run方法结束

    可以使用interrupt()方法可以将线程从冻结状态强制恢复到运行状态中来,让线程具备CPU的执行资格。

    当时强制动作会发生InterruptedException,需要处理

  • 相关阅读:
    [极客大挑战 2019]BuyFlag
    [极客大挑战 2019]BabySQL
    [网鼎杯 2018]Fakebook
    C语言学习笔记_内存数据和字符串
    剑指OFFER_数据流中的中位数
    剑指OFFER_滑动窗口的最大值
    剑指OFFER_矩阵中的路径
    C语言学习笔记_指针相关知识
    剑指OFFER_机器人的运动范围
    剑指OFFER_剪绳子
  • 原文地址:https://www.cnblogs.com/wangxh92/p/3684240.html
Copyright © 2011-2022 走看看