Tag: 线程安全

SecureRandom线程安全吗?

SecureRandom线程安全吗? 也就是说,在初始化之后,可以依靠下一个随机数来获得线程安全吗? 检查源代码似乎表明它是,并且这个错误报告似乎表明它缺乏文档作为线程安全是一个javadoc问题。 有没有人确认它实际上是线程安全的?

如何知道什么是不是线程安全的ruby?

从Rails 4开始 ,所有的东西都必须在线程环境下默认运行。 这意味着我们所写的所有代码,我们所使用的所有gem都必须是threadsafe 所以,我对此有几个问题: ruby / rails中不是线程安全的? Vs什么是ruby / rails中的线程安全? 是否有一个已知是线程安全的gem列表,反之亦然? 有没有线程安全的代码常见模式列表@result ||= some_method ? ruby中的核心数据结构如Hash等线程安全吗? 在MRI上, GVL / GIL只有一个ruby线可以一次运行,除了IO之外,线程安全变更对我们有什么影响?

锁(新对象()) – 货物邪教或一些疯狂的“语言特例”?

我正在审查顾问编写的一些代码,在几十个红旗已经popup的时候,我不能把头围绕在下面的代码片段中: private void foo() { if (InvokeRequired) { lock (new object()) { if (m_bar!= null) Invoke(new fooDelegate(foo), new object[] { }); } } else { if(OnBazChanged != null) OnBazChanged(); } } 什么是锁(新对象())在这里做? 应该没有任何效果,因为它总是locking在另一个对象上,但是这种locking在整个代码中都是永久的,即使在非复制粘贴的部分。 这是C#语言中的一些特殊情况,是编译成我不知道的东西,还是程序员只是采用了一些前一段时间碰巧工作的货物邪教?

随机类线程安全吗?

在多个线程之间共享Random类的一个实例是否有效? 并从多个线程中调用nextInt(int) ?

iPhone独立运行的线程

在单独的线程上运行代码的最佳方式是什么? 是吗: [NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL]; 要么: NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doStuff:) object:nil; [queue addOperation:operation]; [operation release]; [queue release]; 我一直在做第二种方式,但我一直在阅读的卫斯理食谱使用第一种。

Queue.Queue与collections.deque

我需要一个multithreading可以放入东西的队列,多个线程可以读取。 Python至less有两个队列类,Queue.Queue和collections.deque,前者似乎在内部使用后者。 两者都声称在文档中是线程安全的。 但是,队列文档还指出: collections.deque是一个无界队列的替代实现,具有快速primefacesappend()和popleft()操作,不需要locking。 我想我并不是无意的:这是否意味着deque并不完全是线程安全的? 如果是这样,我可能不完全了解这两个阶级之间的区别。 我可以看到Queue添加了阻止function。 另一方面,它失去了一些像支持in-operator这样的dequefunction。 是直接访问内部deque对象 x在Queue()。deque 线程安全的? 另外,为什么当队列已经是线程安全的时候,Queue为它的操作使用一个互斥锁呢?

可以使用Gson实例作为模型bean中的静态字段(重用)吗?

这是我实现的模型: public class LoginSession { private static final Gson gson = new Gson(); private String id; private String name; private long timestamp; public LoginSession(String id, String name) { this.id = id; this.name = name; this.timestamp = System.currentTimeMillis(); } public String toJson() { return gson.toJson(this); } public static LoginSession fromJson(String json) { checkArgument(!isNullOrEmpty(json)); return gson.fromJson(json, LoginSession.class); […]

迭代ConcurrentHashMap值线程安全吗?

在javadoc中用于ConcurrentHashMap的是: 检索操作(包括get)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠。 检索反映了最近完成的更新操作的结果。 对于像putAll和clear这样的集合操作,并发检索可能反映只插入或删除一些条目。 类似地,迭代器和枚举在创build迭代器/枚举时或之后返回反映哈希表状态的元素。 他们不会抛出ConcurrentModificationException。 但是,迭代器一次只能被一个线程使用。 这是什么意思? 如果我尝试用两个线程同时迭代地图会发生什么? 如果我在迭代时从地图上放置或删除一个值,会发生什么?

const是否意味着C ++ 11中的线程安全?

我听说const在C ++ 11中是线程安全的 。 真的吗? 这是否意味着const现在相当于Java的synchronized ? 他们用完了关键字吗?

什么使一个方法线程安全? 规则是什么?

是否有什么使方法线程安全的总体规则/准则? 我知道可能有一百万次的一次性情况,但是一般情况呢? 这是简单的吗? 如果一个方法只访问局部variables,它是线程安全的。 是吗? 这也适用于静态方法吗? @Cybis提供的一个答案是: 局部variables不能在线程间共享,因为每个线程都有自己的栈。 这是静态方法的情况呢? 如果一个方法传递一个引用对象,那么这是否会破坏线程的安全性? 我已经做了一些研究,并且在某些情况下有很多,但是我希望能够通过使用一些规则来定义遵循的准则,以确保方法是线程安全的。 所以,我想我的最终问题是:“是否有一个定义线程安全方法的规则列表?如果是,它们是什么? 编辑 这里有很多好的一点。 我想这个问题的真正答案是:“确保线程安全没有简单的规则。” 凉。 精细。 但总的来说,我认为接受的答案提供了一个好的,简短的总结。 总有例外。 就这样吧。 我可以忍受这一点。