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,需要处理

  • 相关阅读:
    2.NET Core设定数据库种子
    1.ASP.NET Core 中向 Razor Pages 应用添加模型
    获取文件夹目录下的文件信息
    dataGridView读写文本
    C# winform 启动外部程序
    netcore访问本地磁盘
    c#利用定时器自动备份数据库(mysql)
    c#mysql数据库备份还原
    Linux之旅(二)
    Linux之旅
  • 原文地址:https://www.cnblogs.com/wangxh92/p/3684240.html
Copyright © 2011-2022 走看看