Java로 다중 스레드 프로그램을 작성합니다. 새 클라이언트 연결을 처리 할 별도의 스레드를 만듭니다. 나는이 다음 ClientHandler에 스레드에서 Java에서 서버 프로그램을 사용하고 Socket 객체에 대한 참조를 전달합니다.
Socket s;
while(true)
{
s = server.accept();
ClientHandler ch = new ClientHandler(s);
Thread servingThread = new Thread(ch);
servingThread.start();
}
내가이 : 자바에서 내가 객체하지만에만 참조를 전달 할 수없는 경우
,
public class ClientHandler implements Runnable
{
private Socket s;
public ClientHandler(Socket _Socket, boolean _accepted, BaseStation _bs)
{
this.s = _Socket;
}
되지 않는다는 문제가 발생할 것 server
이 새 연결을 허용 할 때마다 ClientHandler 내부의 s
인스턴스에 연결 하시겠습니까? ClientHandler
내부도 변경되지 않고 손상 될 수 있습니까? 그렇다면 올바른 방법은 무엇입니까?
normalocity - http://stackoverflow.com/questions/589919/does-java-pass-by-reference, http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526 -pass.html과 다른 것들은 자바가 우선적으로 가치를 인정한다는 것을 확인시켜 준다. – ziesemer
정확히, Java는 먼저 값에 의해 전달 된 다음 참조로 전달됩니다. :-) – ziesemer
우리는 값에 의해 해석되는 "컨테이너"를 전달하여 참조에 의한 통과를 강제 할 수 있으며, 값을 실제 참조로 유지합니다. I.E., Socket [] socketHolder = 새로운 소켓 [1]; socketHolder [0] = s입니다. 그렇다면 OP가 단순히 "s"대신에 socketHolder [0]을 사용한다면 소켓을 참조로 전달할 것이고 문제가 발생할 것입니다. – ziesemer