套接字和线程,这段代码有什么作用?

时间:2015-05-20 19:59:43

标签: java multithreading sockets

我找到了一个练习(它不是家庭作业或其他任何东西,不用担心):评论以下代码。问题是,我不知道这段代码的作用。到目前为止我发表了我的评论。这是对的吗?

public class A {

private ServerSocket a;

// constructor
public A (int p) {
    a = new ServerSocket(p);             // create a server socket on port p.
    while(true) {                       // infinite loop
     Socket c = a.accept();            // accept the connection from the client.
    Thread th = new Thread(new B(c)); // huh... wtf ? Is that a thread declaration with the 
                                     //runnable interface ? 
                                    //I have no idea. c socket is copied
                                   // in B class field by B constructor.
}
}

public class B implements Runnable {
    private Socket a;

// constructor
public B(Socket aa) {
    a = aa;                 // copying a socket.
 }


public void run() { // overide run methode from runnable ? I don't remember, there is a thing with run...

/// Question from the exercice : what should i put here ?

}

}

1 个答案:

答案 0 :(得分:1)

假设您已经知道线程是什么。代码侦听while循环内部的连接。然后接受连接并创建一个实例为B的新线程。然后线程将调用此对象的run方法(B对象)

回答练习的问题:你可以在run方法中放置一个发送或接收逻辑。

注意:您需要致电

th.start(); 

新创建的线程对象 为了使线程执行run方法。

此外,套接字不会复制到B对象,但会传递引用。因此,两个变量都保持相同的对象。