Java Jetty websocket客户端类websocket客户端线程安全吗?

Java Jetty websocket客户端类websocket客户端线程安全吗?,java,websocket,jetty,client,jetty-9,Java,Websocket,Jetty,Client,Jetty 9,码头9.3 爪哇8 是线程安全的 多个线程是否可以使用此类的单个实例创建websocket会话(使用connect方法)?我不能保证WebSocketClient是100%线程安全的,但我可以说它在一定程度上是线程安全的 查看,我们看到私有方法是同步的: private synchronized void initializeClient() throws IOException 并且该方法使用的是: 该类的文档没有说明线程安全,但是从connect方法调用synchronizediniti

码头9.3

爪哇8

是线程安全的


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

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

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

private synchronized void initializeClient() throws IOException 
并且该方法使用的是:

该类的文档没有说明线程安全,但是从
connect
方法调用synchronized
initializeClient
方法以及使用
Executor
都清楚地表明支持某种形式的多线程

==编辑==

线程安全通常仅在某些类型的操作中得到保证。例如,它只能保证读操作,不能保证写操作。这是文档定义线程安全条件的作用。Sergio Montoro的评论是正确的,如果一个线程在另一个线程使用对象的过程中对其进行修改,可能会发生奇怪的事情。在
WebSocketClient
的情况下,线程安全肯定至少限于其他线程不修改对象,或者同步一致地修改
WebSocketClient
内部状态。

不是,这里至少有一个示例说明了原因:

WebSocketClient
的目的是提供一种与远程websocket端点建立连接的方法

这是通过调用
connect()
方法来实现的,该方法返回将来的会话。好吧,现在想象一下

  • 线程1实例化一个
    WebSocketClient
    并调用
    setCookieStore()

  • 线程1调用
    connect(对象websocket,URI-toUri)

  • 内部
    connect()
    执行线程1

    ClientUpgradeRequest request = new ClientUpgradeRequest(toUri)
    

  • 线程2执行setCookieStore(CookieStore CookieStore)

  • 然后,线程1创建的请求可能具有与线程2的URI相对应的cookie


    为了确保线程安全,在整个连接过程中,对象的内部状态应该是不可修改的。

    +1 WebSocketClient绝对是线程安全的。代码有时可能包含bug这一事实并不意味着这不是多线程代码。不确定WebSocketClient中的cookie存储是否用于设置应在不同调用之间共享的公共cookie。应在ClientUpgradeRequest上使用setCookies设置每请求cookie。如果cookieStore旨在跨线程共享,则应声明为
    volatile
    。否则,一个线程可能会更改值,而另一个线程看不到更改。此外,我在课堂上没有看到如何保存两组cookie:线程间共享子集和每线程子集。此外,是否有可能想到一个合理的用例,以这种方式将cookie拆分为两个子集?
    ClientUpgradeRequest request = new ClientUpgradeRequest(toUri)
    
    request.setRequestURI(toUri)