Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ConcurrentModificationException 异常 #220

Closed
jxch-1024 opened this issue Nov 18, 2020 · 6 comments
Closed

ConcurrentModificationException 异常 #220

jxch-1024 opened this issue Nov 18, 2020 · 6 comments
Assignees
Labels
❓question Further information is requested

Comments

@jxch-1024
Copy link

jxch-1024 commented Nov 18, 2020

线程池同时运行很多任务的时候会出现这个异常,请问有什么解决办法吗?

java.util.ConcurrentModificationException: null
	at java.util.WeakHashMap$HashIterator.nextEntry(WeakHashMap.java:806)
	at java.util.WeakHashMap$KeyIterator.next(WeakHashMap.java:839)
	at com.alibaba.ttl.TransmittableThreadLocal$Transmitter.capture(TransmittableThreadLocal.java:287)
	at com.alibaba.ttl.TtlRunnable.<init>(TtlRunnable.java:34)
	at com.alibaba.ttl.TtlRunnable.get(TtlRunnable.java:130)
	at com.alibaba.ttl.TtlRunnable.get(TtlRunnable.java:94)
	at com.alibaba.ttl.threadpool.ExecutorTtlWrapper.execute(ExecutorTtlWrapper.java:27)
@oldratlee
Copy link
Member

oldratlee commented Nov 18, 2020

首先,确认你使用的是合适的版本(避免废弃或有问题的版本),比如使用版本2.11.5
更多说明参见Release note https://github.com/alibaba/transmittable-thread-local/releases

@jxch-1024 你用的TransmittableThreadLocal库的版本是?
给一下更多的环境信息,如TransmittableThreadLocal库版本、JDK版本、你的使用方式。

最好能有一个可以运行复现问题的简单Demo:

  • 方便排查
  • 自然也有排查问题的环境、使用方式等等信息。

@jxch-1024
Copy link
Author

使用的版本是2.10.2,jdk版本1.8。具体使用情况是多个线程共用同一个线程池,然后均使用这个线程池去执行任务,有概率触发 。

@jxch-1024
Copy link
Author

很遗憾,在demo中暂时没有复现,真实项目中线程池有嵌套的情况。

@jxch-1024
Copy link
Author

出现概率比较小,目前换新版本暂时没复现

@oldratlee
Copy link
Member

oldratlee commented Nov 18, 2020

@jxch-1024 麻烦还是给一下 可以运行问题Demo(比如 提交成一个 Github Repo 我可以查看、运行、分析、排查),
可以展现出 环境、使用方式等等信息,我 可以/想 进一步 分析排查。

PS:
ConcurrentModificationException异常 是(数据)并发问题。TransmittableThreadLocal库在并发上尽力做了完备分析与测试,也在线上有广泛场景大规模大流量的使用,库本身出并发问题应该可能性不大。

但只要是可能的问题就应该跟进分析排查好。


一些并发相关的说明与资料

1. User Guide文档

相比InheritableThreadLocal,添加了

  1. copy方法
    用于定制 任务提交给线程池时ThreadLocal值传递到 任务执行时 的拷贝行为,缺省传递的是引用。
    注意:如果跨线程传递了对象引用因为不再有线程封闭,与InheritableThreadLocal.childValue一样,使用者/业务逻辑要注意传递对象的线程安全。
  2. ……

2. TransmittableThreadLocal 是否线程安全 #175

简单的回答

TransmittableThreadLocal是线程安全的。 @xingguang2013

对于涉及多线程的库来说(如ThreadLocal),缺省要是线程安全,否则就是 BUG
(即如不是线程安全,要显式声明出来)

更完整的回答

库的线程安全,是以正确使用为前提,还要加上使用者相关知识的了解,如:

  • ThreadLocal的了解(这是主题学习)
  • 对线程安全/并发(这是个领域学习)

比如 使用ThreadLocal时,取出ThreadLocal的值(对象引用)并传到其它线程,就要使用者注意额外的线程安全问题了。

3. fucking-java-concurrency: 🎏 Simple show cases of java concurrency problems, seeing 🙈 is believing 🐵

@oldratlee oldratlee self-assigned this Nov 28, 2020
@oldratlee oldratlee added the ❓question Further information is requested label Nov 28, 2020
@oldratlee
Copy link
Member

@jxch-1024 麻烦还是给一下 可以运行问题Demo(比如 提交成一个 Github Repo 我可以查看、分析、运行),
可以展现出 环境、使用方式等等信息,我 可以/想 进一步 分析排查。

@jxch-1024 欢迎提供进一步信息 与 反馈交流。这个Issue先Close了。 :")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
❓question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants