Java线程存在疑问
发布时间:2020-12-15 05:19:00 所属栏目:Java 来源:网络整理
导读:我之前发布了一个关于 Java线程的查询. ( link text) 根据我收到的答案,我决定实施它们.所以我在具有2个CPU内核的机器上完成了这一点编码.代码如下 import java.net.*;import java.io.*;public class thready implements Runnable{private Socket num;public
我之前发布了一个关于
Java线程的查询. (
link text)
根据我收到的答案,我决定实施它们.所以我在具有2个CPU内核的机器上完成了这一点编码.代码如下 import java.net.*; import java.io.*; public class thready implements Runnable{ private Socket num; public thready(Socket a) { this.num=a; } public void run() { try { BufferedInputStream is = new BufferedInputStream(num.getInputStream()); System.out.println("Connected to port"+num); } catch (IOException ex) { //Logger.getLogger(thready.class.getName()).log(Level.SEVERE,null,ex); } } public static void main(String [] args) { int port = 80; int port1= 81; //int count = 0; try{ ServerSocket socket1 = new ServerSocket(port); ServerSocket socket2 = new ServerSocket(port1); while (true) { Socket connection = socket1.accept(); Socket connection1 = socket2.accept(); Runnable runnable =new thready(connection); Runnable run= new thready(connection1); Thread t1=new Thread(runnable); Thread t2=new Thread(run); t1.start(); t2.start(); } } catch(Exception e) { } }} 现在我使用Hyperterminal测试这段代码,并连接到端口890和端口81(我正在使用2个超级终端实例),据我所知,预期的行为应该是“连接到端口’端口号’”应该是一旦连接到任何端口(80或81),就会打印出来.但是我从这段代码得到的输出是,如果我只连接到1个端口,那么所需的输出不会被打印,如果我连接到两个端口,一个接一个,输出只在两个端口之后打印连接了.因此,这再次引发了我最初的困惑,即这两个线程是同时执行还是执行在这两个线程之间交替进行. 任何建议都会有很大帮助. 干杯 解决方法
你在启动线程之前调用了accept.接受将阻止,直到建立连接,这就是为什么你看到你做的行为.如果要监听多个端口,则需要[1]为每个ServerSocket创建一个线程,然后在accept返回时启动一个通信线程,或者在执行监听的线程中逐个处理连接.
[1]这仅适用于您直接使用ServerSocket,您可能应该在学习时使用它. java.nio包及其子包包含用于多路复用非阻塞I / O的类,可用于例如侦听同一线程中的多个套接字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |