- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
LinkedList
具有方便的peek
、pop
、...方法。
不幸的是,我需要一个线程安全的LinkedList
。所以,我的第一个想法是将其包装如下:
List<Object> list = Collections.synchronizedList(new LinkedList<>());
但是,由于 List
接口(interface)不包含 peek
或 pop
方法。这当然行不通。
或者,我可以在整个代码中使用 synchronized(list)
block 。这是要走的路吗?
我忽略了任何解决方案吗?
编辑:
使用 LinkedList
的原因有很多。我看到有些人正在提议其他 Collection 。因此,这里遵循简短的要求,这导致我决定使用 LinkedList
。
更多背景信息:
查看
和验证。如果验证失败,则该项目需要保留在列表中。最佳答案
如果需要peek
要工作,制作一个同步包装器可能还不够,所以你必须写 synchronized
明确地。
与其说是编写包装器的问题,不如说是 peek
的语义问题。方法。不同于 pop
方法,表示单个操作,peek
方法常用于由peek
组成的多组件 Action 中-然后根据什么做其他事情peek
返回。
如果您在包装器中同步,结果将与您手动编写此代码相同:
String s;
synchronized(list) {
s = list.peek();
}
// <<== Problem ==>>
if (s != null) {
synchronized(list) {
s = list.pop();
}
}
这会带来一个问题,因为有时您的列表可能会在 peek
之间发生变化。和 pop
(上面代码中的这个地方被标记为“问题”)。
进行检查和修改的正确方法是在单个 synchronized
中进行 block ,即
synchronized(list) {
String s = list.peek();
if (s != null) {
s = list.pop();
}
}
但是,这不能在简单的包装器中完成,因为两个列表操作在单个 synchronized
中执行 block 。
你可以避免写synchronized
通过构建您自己的封装 LinkedList<T>
的数据结构在多个地方,并提供在同步块(synchronized block)中执行所有测试和修改操作的操作。然而,这不是一个简单的问题,因此您最好以一种可以与预定义的并发容器之一一起工作的方式更改您的算法。
关于java - 同步链表 - peek,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831871/
我有 PriorityQueue 使用示例,它产生 3 1 1 1 5 0 这是代码 import java.util.*; class Someclass { public static class
这个问题在这里已经有了答案: Help: ZX81 BASIC "Peek" function (3 个回答) 7年前关闭。 我需要一种方法来查找字符 ('即将移动,然后阅读 LET C= PEEK(
在 Facebook 应用程序中,如果您“偷看”相册中的一张照片,您可以水平滑动手指以转到其他照片。 这是如何在 API 中完成的?我所看到的只是提供一个 View Controller 并在弹出时提
我对MassTransit使用者是否可以在实际检索msg之前可以Peek()一个MSMQ队列感到好奇。 步骤/过程是什么: 1)消息已发送到队列 2)消费者获取它并必须进行数据库更新-大约需要5秒钟
我从 Microsoft docs 了解到在第一个 Peek() 操作期间,任何一个可用的消息代理都会响应并发送其最旧的消息。然后在后续的 Peek() 操作中,我们可以遍历分区来查看序列号增加的每条
嗨,我正在尝试查看队列,但编译器不断抛出找不到符号错误。 public class HelloWorld{ interface Queue { Queue enqueue(T ele); T dequ
我在循环中遇到了各种场景,在迭代处理项目时我会向前“查看”或“跳过”。 一种情况是我正在枚举文件的行,并且行末尾有一个“继续”字符,指示将下一行与当前行合并。如果我只是简单地循环,这并不太难,我可以读
首先,我想说如果有人能在这里提供帮助,你真是太棒了。 一般问题 我的Python程序需要与MSMQ交互。基本上,我想查看队列,如果队列中没有任何内容,则指定超时。 但是,尽管我尽了最大努力,当队列中先
我正在学习 C 和 C#,这个问题是针对 C# 的。我有这个 while 循环,它导致无限循环。我以前用过这个,它总是很好用。但现在它只是永远循环,永远不会退出。我正在执行此 while 循环以计算文
我在从文件中读取输入时遇到了一些问题,我真的不应该在家庭作业中遇到这些问题。我在之前的上一次分配中使用了非常相似的代码(唯一改变的是值被插入的地方)。我得到了一个包含以下输入的文本文件: 10 3 6
istream& operator>>(istream& s, vector& ord) { string c{}; bool got_customer = false; Cu
Eventfd维护一个 uint64_t 计数器,每次写入时都会增加,每次读取时都会重置为零(如果用作 EFD_SEMAPHORE,则减 1)。是否可以在不更改 eventfd 内部计数器值的情况下查
假设我有一个外部 while 循环来读取每个字符并将其输出到控制台。如果找到一个词,我还想标记它,通过使用 peek 方法,我可以找到一个词的第一个实例。有没有办法窥视前方的多个地方。例如,如果我要查
LinkedList 具有方便的peek、pop、...方法。 不幸的是,我需要一个线程安全的LinkedList。所以,我的第一个想法是将其包装如下: List list = Collections
对于我的应用程序,某些 fragment 要求用户在显示之前在对话框中输入 PIN。我有一个 BaseFragment 类,如果需要 pin,我的所有其他 fragment 都会扩展该类。我现在的问题
我的问题以最简单的方式表达: 根据 JavaDoc : Peek() method exists mainly to support debugging, where you want to see
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
本文将介绍 Stream.peek 方法示例。 peek 方法返回包含该流元素的流,并对每个元素执行提供的 Consumer 操作。 peek 是一个中间操作。从 Java 文档中查找 peek 方法
这似乎应该很容易做到,但是每次我处理这个问题时,我最终都会得到感觉“不太优雅”的解决方案 这是我的基本问题:如果我正在循环浏览以特定方式订购的字典,在循环中的任何给定点内,我如何“查看”或获得对当前位
List nums = Arrays.asList(1,2,3,4,5,6); long result = nums .stream() .peek(System.ou
我是一名优秀的程序员,十分优秀!