Jetty websocket客户端类WebSocketClient线程是否安全?

ben*_*enw 10 java client jetty websocket jetty-9

码头9.3

Java 8

org.eclipse.jetty.websocket.client.WebSocketClient线程安全的.

多个线程可以使用此类的单个实例来创建websocket会话(使用该connect方法)吗?

Ort*_*kni 4

我不能保证WebSocketClient是 100% 线程安全的,但我可以说它在某种程度上是线程安全的。

查看源码,我们看到私有方法initializeClient是同步的:

private synchronized void initializeClient() throws IOException 
Run Code Online (Sandbox Code Playgroud)

并且该connect方法正在使用Executor

// Execute the connection on the executor thread
executor.execute(promise);
Run Code Online (Sandbox Code Playgroud)

initializeClient该类的文档没有提到线程安全,只是从方法中调用synchronized方法connect以及使用Executor是支持某种形式的多线程的明确标志。

==编辑==

线程安全通常仅针对某些类型的操作得到保证。例如,只能保证读操作,而不保证写操作。这就是文档的作用,定义了线程安全的条件。Sergio Montoro 的评论是正确的,如果一个线程在另一个线程使用该对象期间修改该对象,则可能会发生奇怪的事情。在线程安全的情况下WebSocketClient,当然至少限制其他线程不能修改对象,或者限制内部WebSocketClient状态的同步和协调修改。