gpt4 book ai didi

java - java中如何通知某个线程

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:13 25 4
gpt4 key购买 nike

在下面的代码中,我的应用程序运行可能会线程化。但如何通知某些线程。我的任务是当字符串 msg 更改时打印服务器对象 msg 字符串中的所有线程。

class Server{ 
static String msg;

synchronized void setMsg(String msg){
this.msg = msg ;
notifyAll();
}

synchronized void proccess(){
while(true){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" : "+Server.msg);
}
}
}

这是我的线程类:

class MyThread  extends Thread { 
Server ser ;
public MyThread(Server ser) {
this.ser = ser ;
this.start();
}
public void run() {
ser.proccess();
}
}

主要方法():

class Thread_test {
static String[] name = null ;

public static void main(String[] args) throws InterruptedException {
Server ser = new Server();
for (int i = 0 ; i < 5 ; i++){
MyThread t1 = new MyThread(ser);
t1.setName("Thread "+i);
}
while(true){
Thread.sleep(5000);
ser.sendMsg("Msg : current time is = " + System.currentTimeMillis());
}
}

我每 5 秒更改一次服务器消息字符串。当更改消息时,我调用 notifyAll()。这个notifyall就是唤醒所有等待的线程。但我想要的是:我创建 10 个线程并 setName Thread_1 Thread_2 等,现在我想通知一些线程,如 Thread_1、Thread_4 和 Thread_9。我尝试下面的功能

     while(true){
Thread.sleep(5000);
ser.sendMsg("Msg : current time is = " + System.currentTimeMillis());
for ( Thread t : Thread.getAllStackTraces().keySet() ){
if(t.getName().equals("Thread_1") || t.getName().equals("Thread_4") || t.getName().equals("Thread_9")){
t.notify();
}
}
}

我在线程“main”java.lang.IllegalMonitorStateException中遇到异常

预先感谢您提供的任何帮助。

最佳答案

class Server{ 
String msg;

void sendMsg(String msg){
this.msg = msg ;
}
public void proccess() throws InterruptedException{
while(true){
synchronized (Thread.currentThread()) {
Thread.currentThread().wait();
}
System.out.println(Thread.currentThread().getName()+" : "+this.msg);
}
}
}

删除类对象wait()并添加Thread.wait()并添加

synchronized(t){
t.notify();
}

我不知道这是一场正确的 war 。如果错误提供有效的方法。

关于java - java中如何通知某个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249304/

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