有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javaspring@Async和Synchronized

我有一个基于Spring的异步方法(用@Async注释),如果错误事件发生了一定次数,我希望暂停该方法。由于可能有多个线程在做相同的事情,我尝试了一个静态AtomicIntegerMY_COUNT),以便所有线程都能知道计数,并利用AtomicInteger提供的内置并发性

在我的单元测试中(在Eclipse中使用SpringJUnit4ClassRunner运行),在线程到达MY_COUNT.incrementAndGet()之前,一切都正常。然后线就消失了。没有例外,什么也没有。异步工作线程刚刚消失。我试着去掉AtomicInteger并只使用synchronized方法,但同样的情况也发生了

问题@Async和同步之间是否存在某种幕后互动?不可能把两者结合起来吗


编辑:更多信息:它似乎与同步范围有关(如果这是正确的术语)。一旦我从计数器变量中删除了static名称,它仍然会爆炸;但是,当我将其更改为Integer并将增量代码移动到其自己的同步方法时,代码继续运行。我还没有调试底层的Spring代码;是否有任何Spring专家能够阐明这种行为


共 (1) 个答案

  1. # 1 楼答案

    不,异步不应影响原子整数的行为

    根据给定的信息,唯一合乎逻辑的结论是存在一些未报告的异常

    如果可能,请尝试设置未捕获异常处理程序

    http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.UncaughtExceptionHandler.html

    在处理程序中,确保至少打印出跟踪

    如果这并不能为您提供解决方案,或者您在设置未捕获的异常处理程序时遇到问题,请发布您的代码,以便我们可以帮助您