Har*_*kar 3 java sockets multithreading socket.io
是否可以同时从套接字读取和写入?我有一个不断读取套接字的线程.由于只有一个线程从套接字读取,因此读取操作是线程安全的.现在我有许多线程(比如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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个不断调用readMessage()函数的线程(在while循环中).据我所知,如果要读取的套接字上没有消息,该语句inputStream.read(message)将等待消息.
我想知道它是否是安全的exceute outputStream.write(message);而inputStream.read(message);在执行
是的,套接字是双向的并且启用全双工通信,在执行(在不同线程上)同时读取和写入时没有问题.
拥有多个写线程没有问题.您可以在套接字实例而不是SocketManager类上进行同步.