• 线程之间协作


    一、wait、notife、notifyAll

    1、

     2、

    notify就发一个信号,随机给正在wait的线程中一个,不传递;

    notifyAll发送给所有正在wait的线程信号;

    条件允许,使用notifyAll,线程类中重写的run方法做好逻辑判断,使得创建出来的线程不会产生冲突就行;

     3、实现代码

    线程类:

    3.1通知方

     3.2等待方

    3.3 主线程代码:

     

     Thread.sleep() 是Thread的静态方法,使当前线程睡眠,被interrupt中断会报interruptException;

     二、等待超时模式

    等待超时后,不能让程序一直等待下去;

    1、等待超时模式的数据库连接池线程类:

      等待方和通知方:

     2、主线程类和计数器

    创建1000个线程,看下连接成功多少,连接超时多少;

    三、join

    线程插队,谁插队谁先执行,当前线程被插队之后等待插队的所有线程执行完之后才能执行,状态没变,还是执行态,并不是就绪状态;

    1、join插队线程类

     2、主线程:

     前面线程插队到后面线程前面,main插在0前面,接着下一步0插在1前面(带着0自己前面的main),下一步1插在2前面(带着1自己前面的0和main)...

    所以最后插队完毕之后,执行顺序也是main 0 1 2 。。。

     四、

     其中,schronized就是锁,内置锁;

    notify本身不释放锁,但是整个方法块执行完后会释放锁:

  • 相关阅读:
    SwiftUI_2_共享绑定
    iOS_知识点_动画&绘图
    excle表格数据列前批量添加数据
    异步编程模式学习
    这不是一篇技术文档!
    lowcode
    java中如何针对系统灵活变换分割符?
    linux安装nginx
    序列化与反序列化
    Linux安装nginx star
  • 原文地址:https://www.cnblogs.com/wmqiang/p/11668345.html
Copyright © 2020-2023  润新知