gpt4 book ai didi

java - java.net.Socket 线程安全的方式是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:34 24 4
gpt4 key购买 nike

我有一个 Socket,我正在通过 BufferedReaders 和 BufferedWriters 读取和写入。我不确定可以从单独的线程执行哪些操作。我猜想同时从两个不同的线程写入套接字是个坏主意。与同时从两个不同线程读取套接字相同。在一个线程上阅读而在另一个线程上写入怎么样?

我问是因为我想让一个线程在等待更多数据时长时间阻塞读取,但在等待期间我也偶尔有数据要在套接字上发送。我不清楚这是否是线程安全的,或者我是否应该在写入之前取消读取(这会很烦人)。

最佳答案

套接字在流级别是线程不安全的。您必须提供同步。唯一的保证是无论并发性如何,您都不会在不同的读取调用中获得完全相同字节的副本。

但是在 Reader 级别,特别是 Writer 级别,您可能有一些 locking problems .

无论如何,您可以使用 Socket 的流来处理读取和写入操作,就好像它们是完全独立的对象一样(它们是,唯一共享的是它们的生命周期)。

一旦您在一方面的读取线程和另一方面的写入线程之间提供了正确的同步,那么任意数量的读取器和写入器都可以。这意味着,是的,您可以在一个线程上读取并在另一个线程上写入(事实上这很常见),并且您不必在写入时停止读取。

最后一个建议:所有涉及线程的操作都有相关的超时,请确保正确处理超时。

关于java - java.net.Socket 线程安全的方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6672413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com