本地网站搭建时需要使用的软件是,个人网站备案备注范文,设计公司logo需要多少钱,渭南建设网站为什么要协调线程执行顺序 wait和notify是多线程编程中的重要工具#xff0c;多线程调度是随机的#xff0c;很多时候希望多个线程能够按照我们规定的顺序来执行#xff0c;完成线程之间的配合工作
注意事项 1.要想让notify能够顺利唤醒wait#xff0c;就需要确保wait和no…为什么要协调线程执行顺序 wait和notify是多线程编程中的重要工具多线程调度是随机的很多时候希望多个线程能够按照我们规定的顺序来执行完成线程之间的配合工作
注意事项 1.要想让notify能够顺利唤醒wait就需要确保wait和notify是同一个对象调用的所以哪个对象调用wait和notify方法不重要重要的是同一个对象调用 2.wait和notify都需要放到synchronized之内 wait在执行的时候会做三件事1.解锁2.阻塞等待3.等待其他的线程调用notify被唤醒就会尝试重新加锁加锁成功wait执行完毕继续执行后面的逻辑 因为wait在执行的时候要解锁所以wait需要放到synchronized之内虽然notify不涉及解锁但也强制要求要放到synchronized中 3.如果进行notify的时候没有线程处于wait状态就相当于没用也没有副作用
wait与sleep之间的区别 sleep有一个明确的时间到达时间自然就会被唤醒也能提前唤醒使用interrupt提前唤醒 wait默认就是一直死等一直等到有其他线程notifywait也能被interrupt提前唤醒 不过wait也有带超时时间的版本等待一定的时间就直接执行之后的代码 协调多个线程之间的执行顺序当然还是优先考虑wait-notify而不是sleep
一些细节 如果此时有多个线程处于waiting的状态而一个线程调用了notify方法那么就会随机唤醒一个线程而notifyall可以唤醒所有的线程唤醒所有的线程后线程们再争夺上锁的机会
如果我们想要唤醒一个指定的线程怎么办呢 可以让不同线程使用不同的对象来进行wait想唤醒哪个线程就可以用对应的对象调用notify方法
通过wait和notify来协调线程执行顺序的代码案例
package 协调线程执行顺序;import com.sun.source.tree.SynchronizedTree;/*** Created with IntelliJ IDEA.* Description:* User: wuyulin* Date: 2023-07-26* Time: 17:44*/public class Demo1 {private static Object lockernew Object();public static void main(String[] args) {Thread Anew Thread(()-{synchronized(locker){System.out.println(A wait 开始执行);try {locker.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(A wait 执行结束);}});Thread Bnew Thread(()-{synchronized(locker){try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(B notify 开始);locker.notify();System.out.println(B notify 结束);}});A.start();B.start();}
}