gpt4 book ai didi

java - 套接字接受和多线程

转载 作者:行者123 更新时间:2023-12-01 08:03:17 25 4
gpt4 key购买 nike

我有这个问题,我不知道如何解决,我正处于疯狂的边缘。编程,嗯? :/

不管怎样,我有一个服务器,它有一个线程向用户发送它需要的所有信息(需要不断运行),另一个线程等待新的服务器连接。我的问题是一旦调用 socket.accept() ,另一个线程就不会执行。

所以,用代码来解释:

class Thread1 extends Thread {


public void run() {
while(true)
{
s=socket.accept();
}
}

class Thread2 extends Thread {

public void run() {
//do stuff
System.out.println("spam");
}
}

public static void main(String[] args)
{
Thread1 t1 = new Thread1();
t1.start();

t1.Thread2 t2 = t1.new Thread2();
t2.start();
}
}

假设所有其他必需的成员变量都存在,没有编译错误并且连接功能工作正常。只是“Thread2”只执行一次。

所以我的问题是,如何解决这个问题?

提前致谢,

蒂姆。

最佳答案

我认为您对线程有一个基本的误解。让我们看看能否解决这个问题。

线程只是另一个执行管道。将它们视为带有一组特定指令的任务。一旦任务完成,线程就返回。很简单的想法,对吧?

在您的示例中,Thread1有一个无限循环,这是有道理的,它确实无限地运行并且确实无限期地接受客户端。

但是,Thread2只是输出一些文本并返回。没有任何东西告诉它“继续旋转”。

在您的main()内,尽管 Thread2Thread1 的内部类(我可以补充一下,这从一开始就是一种不好的形式)它实际上并没有强制线程继续运行。

您可能需要添加 Queue 到保存新套接字的服务器类,并具有 Thread2循环并检查条目。

进一步阅读

首先,看一下 Thread class 。它的构造函数采用 Runnable ,这就是您在使用线程时应该实现的全部内容(即 class Foo implements Runnable 然后 new Thread(new Foo()) )。

如果您喜欢套接字,也许有一些 further reading有关套接字服务器架构甚至协议(protocol)设计的知识都会让您受益匪浅。

关于java - 套接字接受和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500880/

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