gpt4 book ai didi

java - Java中父子线程的通信

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:43 24 4
gpt4 key购买 nike

我有一个主线程,在该线程中我启动了一个新线程。 (子线程)。该子线程打开服务器套接字并开始监听连接。我希望该线程在主线程从外部获取消息时停止执行并关闭它已初始化的任何内容(如套接字)(从它获取消息的地方不是问题)。我应该如何停止线程并关闭所有连接是我想要的。

我应该使用共享变量吗?这样当主线程收到消息时应该修改它并且子线程应该不断检查该共享变量中的更改?

我应该如何实现?一些有用的链接可能有帮助或示例代码?

我试过的方法如下:在主线程中我声明了一个变量

 flag=0;

当主线程收到消息后,设置

flag = 1 ;

线程监听变化如下:

  void ()run{

while(true){

if(flag==1){
break;
}

sock1 = Ssocket.accept();
}

但是上面的代码根本不起作用。我应该怎么做?

最佳答案

中断线程的正确方法是通过中断机制。在你的主线程中,当你想停止子线程时,你调用:

childTread.interrupt();

然后在子线程中,您执行如下操作:

public void run() {
try {
while (!Thread.currentThread.isInterrupted) {
sock1 = Ssocket.accept();
//rest of the code here
}
} catch (InterruptedException e) {
Thread.currentThread.interrupt(); //good practice
}
//cleanup code here: close sockets etc.
}

注意 Ssocket.accept 是不可中断的,所以如果你想阻止它等待,你必须从外部关闭它,强制它抛出一个 IOException.

关于java - Java中父子线程的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398064/

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