0

为了回应这个线程中的一些评论,我想知道是否制作一个队列,将一个线程添加到它并且另一个线程从它读取需要'volatile'标记?

我想大多数情况都可以,但是在大小为 1 的队列中读写的情况下,没有它会导致问题吗?

目标:

  • 一个线程安全队列,我可以在其中发布要通过 TCP 套接字连接发送的消息。输出流将由另一个类管理,该类将在每个循环开始时检查队列是否为空

我的想法/想法:

  • 也许有一个我在研究中没有发现的 TCP 套接字的内置队列?
  • 在这种情况下使用 volatile 好用,还是应该使用阻塞或锁定调用?

提前致谢。

4

1 回答 1

1

如果您想要像您提到的那样同步访问,请使用锁定对象。

在这种情况下并没有真正使用 Volatile。将您的对象声明List myList为 volatile 意味着如果您曾经尝试实例化一个新 Object 并将其设置为 myList 变量,那么线程将保证知道(大致)分配了一个新对象。它不会阻止或同步与实际对象有关的任何事情。

基本上,就像您说的那样,您需要确保在读取或写入列表时,不会弄乱列表并导致意外错误。要阻止两件事同时发生,请使用锁定对象和 Java synchronized 关键字,或者使用已经为您同步读/写的 List 类型。

于 2012-08-07T19:15:57.560 回答