Java:流和套接字对线程是私有的吗?

Java:流和套接字对线程是私有的吗?,java,multithreading,sockets,Java,Multithreading,Sockets,我正在尝试创建一个线程服务器。我使用线程池来创建一组线程,这些线程处理来自每个客户机的数据。每个线程都需要从第二台服务器发送和接收信息。我创建了一个类来处理与第二台服务器的连接,包括生成inputObjectStream/OutputObjectStram;每个线程都会创建connections类的一个新实例,因此我认为流是独立的,不需要同步connection类,但是当我不同步流时,流不会成功创建 据我所知,套接字和流对每个线程都应该是私有的,我错了吗 这里是一个非常简短的伪代码结构,我只是想

我正在尝试创建一个线程服务器。我使用线程池来创建一组线程,这些线程处理来自每个客户机的数据。每个线程都需要从第二台服务器发送和接收信息。我创建了一个类来处理与第二台服务器的连接,包括生成inputObjectStream/OutputObjectStram;每个线程都会创建connections类的一个新实例,因此我认为流是独立的,不需要同步connection类,但是当我不同步流时,流不会成功创建

据我所知,套接字和流对每个线程都应该是私有的,我错了吗

这里是一个非常简短的伪代码结构,我只是想澄清一下

public static void main(){
   //Create the threads
   ExecutorService executor = Executors.newFixedThreadPool(numberOfThreads);
   for(int i=0; i<X;i++){
     Runnable worker = new ProcessCommands(list, GeneratorResponse);
     executor.execute(worker);
   }
   executor.shutdown();
    while (!executor.isTerminated()) {
    }
}

public ProcessCommands(List<String> list, String threadName){

    public void run(){
    Connection Connect = new Connection();
    Connect.getData();
    }
}

public class Connection implements Serializable{
  private static Socket WG_Socket= null;
  private static String WG_addr = "b132.seng.uvic.ca";
  private static int WG_Port = 44433;
  public Connection(){
  }

  public int getData(){
   WG_Socket =  new Socket(WG_addr,WG_Port);

   ObjectOutputStream out = new ObjectOutputStream(WG_Socket.getOutputStream());

   out.writeObject("Send Data");

   ObjectInputStream in = new ObjectInputStream(WG_Socket.getInputStream());

   return (Integer)in.readObject();
}
}
publicstaticvoidmain(){
//创建线程
ExecutorService executor=Executors.newFixedThreadPool(线程数);

对于(int i=0;iYou创建一个新实例,但WG_Socket是静态的。因此所有实例共享同一个变量。此变量应该是getData()的局部变量。其他的应该是常量,即static final。请遵守Java命名约定。如果一个套接字仅由一个线程使用,那么您的生活会更简单,但没有任何强制措施。您有一个套接字同时由多个线程使用。它们只与您创建的套接字一样私有或公共。没有任何固有特性。静态套接字很少使用静态的东西在多线程应用程序中很少是正确的。我不明白为什么开发者在这样的OO类中不断地做这些静态声明——这就像某种自杀的愿望。