专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

线程的等待和唤醒

synchronized 解决了多线程竞争的问题: 我们可以 在 synchronized块中安全的对一个变量进行修改

 class TaskQueue{

  Queue<String> queue= new LinkedList<>();
    public synchronized void addTask(String s){
        this .queue.add(s)
    }
}

没有解决多线程协调的问题

 class TaskQueue{

 //队列
  Queue<String> queue= new LinkedList<>();

    public synchronized void addTask(String s){
        this .queue.add(s)
    }

    public synchronized String getTask(){

        while(queue.isEmpty()){

        }
        return queue.remove();
    }

}

多线程协调运行: 但条件不满足时,线程进入等待状态

  public synchronized String getTask(){  //1.线程1 获取锁

        while(queue.isEmpty()){ // 线程 1 判断条件
           this.wait();  //线程 1 进入等待状态
        }
        return queue.remove();
    }

线程协调机制: wait /notify

 class TaskQueue{

 //队列
  Queue<String> queue= new LinkedList<>();

    public synchronized void addTask(String s){
        this .queue.add(s)
        this.notify();
    }

    public synchronized String getTask(){

        while(queue.isEmpty()){

        }
        return queue.remove();
    }

}

wait /notiy 用于多线程协调运行:

1、 在synchronized内部可以调用wait()是线程进入等待状态
2、 必须在已获得的锁对象调用wait()方法
3、 在synchronized内部可以调用notify/notiyAll()唤醒其他等待线程
4、 必须在获得的锁对象调用notify/notifyAll()方法

文章永久链接:https://tech.souyunku.com/23672

未经允许不得转载:搜云库技术团队 » 线程的等待和唤醒

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们