⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 establishrendezvous.java

📁 a simple java mutlti thread concurrency program src code
💻 JAVA
字号:
package Synchronization;import java.net.*;import java.io.*;import Utilities.*;public class EstablishRendezvous extends MyObject {/* *   Objects of this class are used as places to establish a rendezvous. * Constructors are available for the local case (client and server in * the same JVM) and for client and server on different JVMs (using a * socket).  A common object of this class is used for the local case, * in which the client and server call clientToServer and serverToClient, * respectively, to get an ExtendedRendezvous object containing the * communication channel (SyncMessagePassing for local).  For the remote * case, the client and server create their own objects of this class. * Then they call call clientToServer and serverToClient to get their * ExtendedRendezvous objects to conduct transactions (serialized objects * through a socket for between JVMs).  The case of sending raw data types * through a pipe (same JVM) or a socket (different JVMs) is not handled * and is an exercise for the reader. *   In the local case, one object of this class can be shared by multiple * client threads and server threads.  In the remote case, one server-side * object of this class can be shared by multiple servers and one client- * side object of this class shared by multiple clients. */   private MessagePassing in = null;   private String machineName = null;   private int portNum = -1;           // stays -1 in local case as a flag   private ServerSocket serverSocket = null;   // local, for both clients and servers   public EstablishRendezvous() {      super("EstablishRendezvous");      in = new SyncMessagePassing();   }   // server side, contains ServerSocket   public EstablishRendezvous(int portNum) throws MessagePassingException {      super("EstablishRendezvous: portNum=" + portNum);      this.portNum = portNum;      try {         serverSocket = new ServerSocket(portNum, 50);      } catch (IOException e) {         System.err.println("EstablishRendezvous: cannot ServerSocket on "            + portNum + " port, " + e);         throw new MessagePassingException();      }   }   // client side, save machine name and port   public EstablishRendezvous(String machineName, int portNum) {      super("EstablishRendezvous: machineName=" + machineName         + " portNum=" + portNum);      if (machineName == null || portNum < 0) {         System.err.println("EstablishRendezvous: bad machine name or port "            + machineName + ", " + portNum);         throw new NullPointerException();      }      this.machineName = machineName;      this.portNum = portNum;   }// Server calls this method to get the ExtendedRendezvous object to use// with the client.   public Rendezvous serverToClient() throws MessagePassingException {      if (portNum < 0) return (Rendezvous) receive(in);  // local case      Socket socket = null;      try {                                              // remote case         socket = serverSocket.accept();      } catch (IOException e) {         throw new MessagePassingException();      }      Rendezvous r = new ExtendedRendezvous(socket);      return r;   }// Client calls this method to get the ExtendedRendezvous object// to use with the server.   public Rendezvous clientToServer() throws MessagePassingException {      if (portNum < 0) {                                // local case         Rendezvous r = new ExtendedRendezvous();         send(in, r);         return r;      } else {                                          // remote case         Socket socket = null;         try {            socket = new Socket(machineName, portNum);         } catch (IOException e) {            throw new MessagePassingException();         }         Rendezvous r = new ExtendedRendezvous(socket);         return r;      }   }   public void close() {      try {         if (serverSocket != null) serverSocket.close();      } catch (IOException e) {         System.err.println(getName() + ", close: " + e);      }   }   public String toString() { return getName(); }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -