加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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的类,可用于例如侦听同一线程中的多个套接字.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读