Tag: 并发

易失性HashMap与ConcurrentHashMap

我有一个缓存类,其中包含一个用于存储缓存项的volatile HashMap 。 我很好奇将volatile HashMap更改为ConcurrentHashMap的后果是什么? 我会获得性能提升吗? 此缓存是只读缓存。 什么是最好的选择? 只是HashMap? 缓存正在一段时间内填充。

这个Spring单例bean线程的设计是安全的吗?

考虑以下Spring Service类。 定义的弹簧范围是Singleton。 自动连接的两个服务bean作为下面类中的字段具有相似的结构 – 它们也由以下任一字段组成 春豆本身 无国籍class 不可变类 等等。 此模式总体上用于应用程序设计中。 @Service public class DocumentService { private final DocumentGenerationService documentGenerationService; private final DocumentPublishService documentPublishService; @Autowired public DocumentService (DocumentGenerationService documentGenerationService, DocumentPublishService documentPublishService) { this.documentGenerationService = documentGenerationService; this.documentPublishService = documentPublishService; } … methods follow 说DocumentService类是不可变的是正确的,因为它不可能改变它的两个字段中的任何一个(它们是只能由容器本身初始化一次的spring bean)? 在任何情况下,上面定义的DocumentService bean都可以被认为是线程安全的吗? 如果遵循这个设计,整个应用程序也是线程安全的吗?

unit testing实时/并发软件

可能重复: 我该如何对线程代码进行unit testing? 经典的unit testing基本上只是将x放入并期望y out,并使该过程自动化。 因此,测试任何不涉及时间的东西都是有益的。 但是,我遇到的大部分非常重要的错误都与时间有关。 线程会破坏彼此的数据,或导致死锁。 不确定性的行为发生了 – 一万分之一。 硬的东西。 对于multithreading并发系统的“unit testing”部分,有什么有用的东西吗? 这些测试如何运作? 是否有必要长时间运行此类测试的主题并以一种巧妙的方式改变环境,以确信其工作正常?

java并发:很多作家,一个读者

我需要在我的软件中收集一些统计信息,我正在努力使其快速正确,这对我来说并不容易(对我而言!) 到目前为止,我的代码首先是两个类,一个StatsService和一个StatsHarvester public class StatsService { private Map stats = new HashMap(1000); public void notify ( String key ) { Long value = 1l; synchronized (stats) { if (stats.containsKey(key)) { value = stats.get(key) + 1; } stats.put(key, value); } } public Map getStats ( ) { Map copy; synchronized (stats) { copy = new HashMap(stats); […]

阅读“Java Concurrency In Practice”以获取更多并发示例?

SO的许多人建议通过阅读Java Concurrency in Practice(JCIP)来深入研究Java并发性,有时也会提到Doug Lea的1999年的书 : https://stackoverflow.com/questions/1237980/java-5-concurrency-book-recommendations https://stackoverflow.com/questions/452391/recommended-books-on-concurrency-synchronization-mechanisms 在阅读JCIP之后,仍然觉得有必要重新概述/巩固该主题 。 这主要是因为我觉得JCIP中缺少示例 ,但本书几乎触及了Javamultithreading的所有方面。 您能否通过大量java.util.concurrent。*用法示例推荐任何可以补充JCIP的书籍/资源 ? 欢迎任何建议或链接。 非常感谢。

java中的sleep和join之间的相似性

正如问题所示,我想知道线程上sleep和join方法之间的相似性。 我已经经历了许多描述睡眠和连接方法之间差异的问题。 但我想知道睡眠和连接方法可以互换使用的不同场景。 根据我的想法,下面的代码应该以同样的方式工作。 我有一个主线程,我在其中启动一个新线程(只有1),我希望主线程等待新线程完成一段时间。 代码如下: newThread.join(10000) 要么, Thread.sleep(10000) 但是,当我运行此代码时,我没有得到预期的结果。 为什么会这样? 从技术上讲它应该是一样的吗?

为什么在Java中调用信号后调用解锁?

在Java中,为什么在调用signal( notFull.signal()和notFull.signal() )之后解锁被调用( notFull.signal() )? 顺序在pthread中反转 。 那么为什么会有区别呢? 谢谢。 从多处理器编程的艺术, 1 class LockedQueue { 2 final Lock lock = new ReentrantLock(); 3 final Condition notFull = lock.newCondition(); 4 final Condition notEmpty = lock.newCondition(); 5 final T[] items; 6 int tail, head, count; 7 public LockedQueue(int capacity) { 8 items = (T[])new Object[capacity]; 9 } 10 […]

使用外类锁获取内部类锁?

我有一个外部类A,它有一个公共内部类,结构如下 – : public class A{ public int x; public class B{ private static final int y; } public synchronized int method1(){ return x+ By; } } 问题是如果我在类A的每个方法上都使用了synchronized关键字它是否也会锁定内部类的成员?

在gui线程中触发异步事件

TL; DR我正在寻找让一个线程在另一个线程中引发事件的方法 编辑:我说“立即”这个词,正如一些评论者指出的那样,是不可能的。 我的意思是它应该合理地快速发生,如果gui线程处于空闲状态(如果我的工作正确,应该是),在毫秒到纳秒的范围内。 案例:我有一个有Parent类的项目。 该Parent类创建一个子线程’Gui’,它包含一个javafx应用程序并实现Runnable。 Parent和Gui都引用了相同的BlockingQueue。 我想要发生的事情:我希望能够将对象从父类发送到Gui线程,并让Gui接收某种事件,立即调用某种处理函数,所以我知道得到一个或者队列中的更多对象并将它们添加到gui中。 用于“观察者模式”的其他解决方案通常涉及位于while循环中的观察者,检查一些同步队列以寻找新数据。 这对我的应用程序不起作用,因为Javafx要求只能从gui线程修改gui元素,并且gui线程必须在很大程度上保持空闲状态,以便它有时间重绘事物并响应用户事件。 循环会导致应用程序挂起。 我发现似乎有潜力的一个想法是从父线程中断Gui线程,并触发某种事件,但我找不到任何方法来实现这一点。 有任何想法吗? 针对这种情况的最佳做法是什么?

会话计数器具有HttpSessionListener和会话计数变量访问权限

我在Sun的“Core Servlets和JavaServer Pages vol 2”中看到了一个带会话计数器的例子。 Counter简单地构建在HttpSessionListener并使用sessionCreated / sessionDestroyed递增/递减会话计数: public class SessionCounter implements HttpSessionListener { private int currentSessionCount = 0; public void sessionCreated(HttpSessionEvent event) { currentSessionCount++; } … public int getTotalSessionCount() { return(totalSessionCount); } … // counter decrement, self registering in context attribute etc. 监听器在上下文中注册自己,因此servlets可以访问它并获得计数器值。 没有同步块。 是否安全, currentSessionCount volatile ? currentSessionCount可以缓存在CPU寄存器中,并且对于使用servlets提供请求的其他线程的精确值是不可见的?