ソケットから同時に読み書きすることは可能ですか? ソケットを継続的に読み取るスレッドがあります。ソケットから読み取るスレッドは 1 つだけなので、読み取り操作はスレッドセーフです。今、私はソケットに書き込む多くのスレッド (たとえば 100) を持っています。したがって、次のようなことを行うことで、書き込み操作をスレッドセーフにする必要があることは明らかです。
package com.mysocketapp.socketmanagement;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketManager {
private Socket socket = null;
private InputStream inputStream = null;
private OutputStream outputStream = null;
public SocketManager() {
socket = new Socket("localhost", 5555);
//server's running on same machine on port 5555
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();
}
public void writeMessage(byte[] message) throws IOException {
synchronized (SocketManager.class) {
if (message != null) {
outputStream.write(message);
}
}
}
public byte[] readMessage() throws IOException {
byte[] message = new byte[10]; //messages are of fixed size 10 bytes
inputStream.read(message);
}
}
これで、(while ループで) readMessage() 関数を常に呼び出すスレッドができました。私が知る限り、ソケットに読み取られるメッセージがない場合、ステートメントinputStream.read(message)
はメッセージを待ちます。
outputStream.write(message);
実行中inputStream.read(message);
に実行しても安全か知りたい