每个人希望您能在这方面帮助我:我有两个线程,负责处理来自客户端的连接。
这是我的密码
ServerSocket loginSocket = new ServerSocket(8000);
ServerSocket fileSocket = new ServerSocket(7000);
while (running) {
new LoginThread(loginSocket.accept(),loginInormation).start();
new LoaderThread(fileSocket.accept()).start();
}
当我尝试两次连接到loginSocket时,服务器将阻塞并停止工作,从而阻塞客户端,但如果我删除以下内容,则不会发生这种情况:
new LoginThread(loginSocket.accept(),loginInormation).start();
我没有收到任何错误消息,那么为什么会发生这种情况,我如何修复?
在不同的线程中启动fileSocket和登录套接字
package com.ca.training.task.app;
import java.io.IOException;
import java.net.ServerSocket;
public class App {
public void execute() {
LoginRunnable loginRunnable = new LoginRunnable();
loginRunnable.setLoginInformation(new Object());//Login information
FileRunnable fileRunnable = new FileRunnable();//Data for loaded runnable.
fileRunnable.setParams(new Object());
startLoginThread(loginRunnable);
startFileThread(fileRunnable);
}
private static void startLoginThread(LoginRunnable loginRunnable) {
Thread loginThread = new Thread(loginRunnable);
loginThread.start();
}
private static void startFileThread(FileRunnable fileRunnable) {
Thread loadedThread = new Thread(fileRunnable);
loadedThread.start();
}
class LoginRunnable implements Runnable {
private Object loginInformation;
@Override
public void run() {
try {
ServerSocket loginSocket = new ServerSocket(8000);
loginSocket.accept();
} catch (IOException e) {
e.printStackTrace();
}
}
public Object getLoginInformation() {
return loginInformation;
}
public void setLoginInformation(Object loginInformation) {
this.loginInformation = loginInformation;
}
}
class FileRunnable implements Runnable {
private Object params;
@Override
public void run() {
try {
ServerSocket fileSocket = new ServerSocket(7000);
} catch (IOException e) {
e.printStackTrace();
}
}
public Object getParams() {
return params;
}
public void setParams(Object params) {
this.params = params;
}
}
}
新登录读取(loginSocket.accept(),LoginInformation)行。开始()包含方法调用loginSocket。accept(),它将在创建此线程之前调用。此方法调用将被阻止,直到客户端登录。(此外,第二个线程将被fileSocket.accept()阻塞)。
至于解决方案,我会将接受()
调用移动到每个线程内部。您需要将套接字传递给线程,以便它们执行此操作。
接受()
方法是一种阻塞方法,这意味着您的程序在使用loginSocket()
建立连接之前不会继续。
当您创建LoginThread
时,程序会等待连接来设置对象的第一个参数,并且在建立连接之前不会继续执行。
问题内容: 有没有人在编写比较两个REST服务的测试方面有任何技巧?我们这样做是作为回归测试的一种形式。 我希望按照以下方式做一些事情: 向两个服务发送“ / 1”的GET并比较结果 向这两个服务发送POST,然后比较结果 向两个服务发送一个PUT,并比较结果 这个想法是: 每个操作都发送到两个服务 结果应该相同 REST服务是用Java / Jersey编写的,因此使用它是理想的,但是人们发现有
问题内容: 假设我有这个: 问题: break语句会将我带出两个循环还是仅从内部循环带出?谢谢。 问题答案: 在您的示例中,break语句将使您退出while(b)循环
问题内容: 我有一个带有表“ Staff”的数据库(SQL),其中有两个记录。我需要使用PHP在网页上显示这些记录的内容。 我将如何正确更改while循环,以便它将在页面上显示两个记录。 谢谢! 问题答案: 仅从数据库中检索一行。您需要在循环中调用它以检索所有行。该增量是不必要在这里,因为返回false时,没有更多行可供选择。
无法找到这个问题的答案。我有一个mysqli循环语句。在这个循环中,我想运行另一个查询。我不能同时编写这两个sql。可能吗?我想,因为我使用stmt并设置它来准备语句。所以我添加了另一个变量stmt2。单独运行它们是可行的,但像我写的那样运行它会给我“mysqli致命错误:对非对象调用成员函数bind_param()” 伪代码: 答案是: 我真傻,我不知道我必须有两个mysqli连接。所以解决方案
问题内容: 我正在使用python更新一些LED。我一直在这样做: 我想用Flask充当一些我可以在我的浏览器中运行的ReactJS前端(以更改当前模式等)与Python中的LED控制代码之间的桥梁。 我的Flask工作正常,可以处理HTTP请求,等等。我想知道如何设置我的flask应用程序同时连续运行(或快速运行),同时仍然能够相互通信,就像这样: 我遇到了,这似乎可以解决问题,但对于我的问题有
问题内容: 以下示例在Node.js书中给出: 解释了while循环为何阻止执行时,作者说: 节点将永远不会执行超时回调,因为事件循环卡在了循环中,而循环在第7行开始了,因此永远不会给它处理超时事件的机会! 但是,作者没有解释为什么这是在事件循环的背景下发生的,还是在幕后真正发生了什么。 有人可以详细说明吗?为什么节点卡住?以及如何在保留控制结构的同时更改上述代码,以使事件循环不会被阻塞,并且代码