zoukankan      html  css  js  c++  java
  • 多线程的通信问题

    前提:

    1:当多个线程并发执行时, 在默认情况下CPU是随机切换线程的,每个线程执行的次序都是随机的。

    2:如果我们需要多个线程共同完成一个任务,并且希望他们有规律的执行(有可能是多线程间交替执行,有可能是当某个线程达到某个条件后才让其他线程执行),就需要线程之间协调通信。 

    3:我认为处理线程安全的同步锁机制,也算是线程间的通信。

    解决方案:等待唤醒机制

    1:一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法。而且synchronized的锁对象和调用wait()、notify/notifyAll() 方法的对象必须是同一个对象。

    2:由于 wait()、notify/notifyAll() 在synchronized 代码块执行,说明当前线程一定是获取了锁的。

    3:wait()使当前线程阻塞,当线程执行wait()方法的时候,会释放当前的锁,然后让出CPU,进入等待状态。 

    4:只有当线程执行 notify/notifyAll() 方法的时候,才会唤醒一个或多个正处于等待状态的线程,然后当前线程继续往下执行,直到执行完synchronized 代码块的代码或是中途遇到wait() ,才会再次释放锁。

    5:notify/notifyAll() 的执行只是唤醒沉睡的线程,而不会立即释放锁,锁的释放要看代码块的具体执行情况。所以在编程中,尽量在使用了notify/notifyAll() 后立即退出同步代码块或者调用wait(),以唤醒其他线程让其获得锁

    例子:

  • 相关阅读:
    简单的登录验证小程序_python
    远程执行命令_python
    远程执行本地脚本_linux
    反射_python
    ssh oa项目介绍
    返回上一级过程
    ssh框架开发crm(客户关系系统总结)
    struct相对路径,绝对路径
    <s:textfield>标签回显
    ssh框架整合
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302453.html
Copyright © 2011-2022 走看看