我以前发布了一个关于Java线程的查询。 (link text)Java线程怀疑
根据我收到的答案,我决定实施它们。所以我在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)
{
} }}
现在即时通讯测试这块使用超级终端代码和上午连接到两个端口890和端口81(正在使用超级终端2个实例)和我理解预期的行为应该是只要连接到任何端口(80或81),就应该打印“连接到端口”端口号“”。但我从这段代码得到的输出是,如果我只连接到1端口,那么所需的输出不会被打印,如果我连接到两个端口,一个接一个,输出仅在两个端口后打印连接。所以这又让我对最初的困惑是这两个线程是并发执行还是执行在这两个线程之间交替。
任何建议都会有很大的帮助。
干杯
+1不读取Java API文档:) – willcodejavaforfood 2010-01-22 11:47:34