#java #dependency-injection
#java #внедрение зависимостей
Вопрос:
Я хочу иметь только один TCP-сокет, который подключается к другой программе. Каждый новый вызов моей конечной точки rest записывает данные в мой TCP-сокет. Если я напишу класс с моим TCP-сокетом и внедрю его в свой класс контроллера, будет ли он потокобезопасным? или я должен синхронизировать их с помощью ключевого слова synchronize?
@Component
public class ViconetBuffer {
private Socket socket;
private boolean connectToViconSocket(){
try {
socket = new Socket(DeviceAddressUtil.socketIp,DeviceAddressUtil.port);
return true;
}catch (Exception ex){
ex.printStackTrace();
return false;
}
}
public void sendDataToViconSocket(String message){
try {
if (!socket.isConnected()){
connectToViconSocket();
}else socket.getOutputStream().write(message.getBytes());
}catch (Exception ex){
ex.printStackTrace();
}
}
}
Комментарии:
1. что происходит, когда вы пытаетесь записать большой фрагмент данных в TCP и снова обращаетесь к службе во время передачи?
Ответ №1:
Нет, это ваша работа. Spring / CDI / EJB не может знать, как вы хотите, чтобы несколько потоков координировали свое использование сокета.
Комментарии:
1. Так не следует ли мне внедрить класс и сделать методы синхронизированными, а сокет статичным?