gpt4 book ai didi

java - 关于 Java 线程的查询

转载 作者:行者123 更新时间:2023-11-29 07:21:14 25 4
gpt4 key购买 nike

请告诉我如何打印“After wait”;如何在以下代码中通知主线程:

import java.util.*;  

public class Test {

public static void main(String[] args) throws InterruptedException {
ArrayList al = new ArrayList(6);
al.add(0, "abc");
al.add(1, "abc");
al.add(2, "abc");
synchronized(al){
System.out.println("Before wait");
al.wait();
System.out.println("After wait");
}

}

}

最佳答案

wait() 调用一直阻塞,直到有人 notify() 调用它...基本上,您需要创建一个调用 al 的新线程.notify() 当主线程在 wait() 中阻塞时。

此程序打印Before wait,暂停一秒钟,然后打印After wait

import java.util.ArrayList;

public class Test {

public static void main(String[] args) throws InterruptedException {

final ArrayList al = new ArrayList(6);
al.add(0, "abc");
al.add(1, "abc");
al.add(2, "abc");

// Start a thread that notifies al after one second.
new Thread() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

synchronized (al) {
al.notify(); // <-- this "releases" the wait.
}
}
}.start();

synchronized (al) {
System.out.println("Before wait");
al.wait();
System.out.println("After wait");
}
}
}

这是我之前的一个回答的链接,解释了为什么 wait()notify() 必须 在按住监视器的锁定。

关于java - 关于 Java 线程的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4183079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com