Java 在这种情况下套接字接受方法是否阻塞
只是一个又短又甜的。我正在尝试创建一个聊天客户端,因此我有一个线程池来管理服务器上的套接字连接。如果我使用:Java 在这种情况下套接字接受方法是否阻塞,java,sockets,threadpool,Java,Sockets,Threadpool,只是一个又短又甜的。我正在尝试创建一个聊天客户端,因此我有一个线程池来管理服务器上的套接字连接。如果我使用: while(true) { thrdPool.execute(new ServChatSocket(servSocket.accept(), InOutMan)); } 在接收到连接之前,是否会阻止ServChatSocket被创建并添加到池中,是否会向池中添加一个异常中断的ServChatSocket,是否会在接收到入站连接之前抛出某种重复错误 我是否
while(true) {
thrdPool.execute(new ServChatSocket(servSocket.accept(), InOutMan));
}
在接收到连接之前,是否会阻止ServChatSocket
被创建并添加到池中,是否会向池中添加一个异常中断的ServChatSocket
,是否会在接收到入站连接之前抛出某种重复错误
我是否应该在while块中使用if语句来检查在传递到thrdPool
之前是否有对象准备好连接?比如:
while(true) {
if(s = servSocket.accept()) {
thrdPool.execute(new ServChatSocket(s, InOutMan));
}
}
在防止上述错误(如果有)的基础上,这会被认为是更好、更干净的代码吗
在收到连接之前,是否会阻止ServChatSocket的创建和添加到池中
对
向池中添加异常损坏的ServChatSocket,并产生意外结果
没有
或者抛出某种重复错误,直到收到入站连接
没有
我是否应该在while块中使用if语句来检查在传递到thrdPool之前是否有一个对象准备好连接
否。ServerSocket.accept()
从不返回null
在收到连接之前,是否会阻止ServChatSocket的创建和添加到池中
对
向池中添加异常损坏的ServChatSocket,并产生意外结果
没有
或者抛出某种重复错误,直到收到入站连接
没有
我是否应该在while块中使用if语句来检查在传递到thrdPool之前是否有一个对象准备好连接
否。
ServerSocket.accept()
从不返回null。这是一个简单的计算顺序问题
thrdPool.execute(new ServChatSocket(servSocket.accept(), InOutMan));
只是一个普通的函数调用。Java内部并没有神奇之处,它试图检测到,当您编写此代码时,它与启动线程有关。不,execute()方法的任务是在自身内部启动线程,但这只是在自身内部
在这里,使用参数调用execute()。此参数为:
new ServChatSocket(servSocket.accept(), InOutMan)
因此,必须先对其求值,然后才能调用execute()
它是一个具有两个参数的构造函数,在调用构造函数之前需要对这些参数进行求值。其中一个参数是
servSocket.accept()
这是一种方法调用,在客户端连接并接受套接字连接之前一直阻塞
因此,是的,它将阻止。在准备好之前没有线程创建,没有错误
除了防止上述错误(如果有)之外
这是更好、更干净的代码吗
if()只能对布尔表达式求值,因此您的示例将不起作用。更重要的是,没有if()。当您调用accept()时,要么您在响应中获得了一个有效的套接字实例,要么您的程序在尝试时停止,并且在停止时没有代码执行
但是您可能应该首先调用accept(),将套接字存储在变量中,然后执行()。就执行而言,这与将所有内容放在一行是一样的。但你问这些问题的事实表明,我们的大脑在理解和正确阅读这些句子方面有点困难。你并不孤单。将顺序步骤分解为多条指令更为清晰。这是一个简单的计算顺序问题
thrdPool.execute(new ServChatSocket(servSocket.accept(), InOutMan));
只是一个普通的函数调用。Java内部并没有神奇之处,它试图检测到,当您编写此代码时,它与启动线程有关。不,execute()方法的任务是在自身内部启动线程,但这只是在自身内部
在这里,使用参数调用execute()。此参数为:
new ServChatSocket(servSocket.accept(), InOutMan)
因此,必须先对其求值,然后才能调用execute()
它是一个具有两个参数的构造函数,在调用构造函数之前需要对这些参数进行求值。其中一个参数是
servSocket.accept()
这是一种方法调用,在客户端连接并接受套接字连接之前一直阻塞
因此,是的,它将阻止。在准备好之前没有线程创建,没有错误
除了防止上述错误(如果有)之外
这是更好、更干净的代码吗
if()只能对布尔表达式求值,因此您的示例将不起作用。更重要的是,没有if()。当您调用accept()时,要么您在响应中获得了一个有效的套接字实例,要么您的程序在尝试时停止,并且在停止时没有代码执行
但是您可能应该首先调用accept(),将套接字存储在变量中,然后执行()。就执行而言,这与将所有内容放在一行是一样的。但你问这些问题的事实表明,我们的大脑在理解和正确阅读这些句子方面有点困难。你并不孤单。在多个指令中分解顺序步骤更简单