Markkkkks

Results 7 comments of Markkkkks

java版本:java version "1.8.0_301" ttl版本:2.12.1 操作步骤: 1. 线程池声明: ```java private static final ExecutorService EXECUTOR = new ThreadPoolExecutor(8, 16, 60, TimeUnit.SECONDS, new LinkedBlockingQueue(), new ThreadPoolExecutor.CallerRunsPolicy()); ``` 2. 提交任务 ```java List futures =...

@oldratlee 我代为回答一下,业务逻辑中并没有做回调一下两个方法。堆栈中的错误是在`future.get();`这个代码中抛出的异常。 - com.alibaba.ttl.TransmittableThreadLocal#beforeExecute - com.alibaba.ttl.TransmittableThreadLocal#afterExecute 目前猜测是否短时间内新建多个`ttlRunable`的时候,`TTL`框架在做`threadLocal`相关的拷贝时,在`TransmittableThreadLocal`的内部类`com.alibaba.ttl.TransmittableThreadLocal#holder`上发生了并发修改的问题?

在提交到`TtlRunnable`到线程池的时候,在`TtlRunnable`结束前有调用`com.alibaba.ttl.TransmittableThreadLocal#remove`做当前线程`Context`的清除,不知道是否是这个操作不合理

> @Markkkkks 你确认有引入其他agent么? 启动参数里面仅有这个agent `-javaagent \IDEA-U\ch-0\212.5080.55\plugins\java\lib\rt\debugger-agent.jar`

> 期望能从你这边出这个问题的业务代码中, > 分离整理 一个可以(有较大概率)复现问题的极简Demo工程 @oldratlee 是这种做法,谢谢回复与`test code`,了解这种处理方式是比较合适的。 我尝试在业务代码中寻找不安全的并发操作 and 用剥离业务代码的`test code`复现这个问题。 另外根据堆栈的信息,是在`holder`的`WeakHashMap`的`fast fail`机制下触发的并发修改异常,也无法从堆栈中快速发现可疑的并发操作。 请问下 1. 是否能优化堆栈的报错信息 2. 除了demo代码外,框架中是否有其他操作or机制会,调用这个`WeakHashMap`的`put`方法,导致在`iterate`这个`Map`的时候出现并发异常?

> 修改好了,在分支[`expt/hotfix-293`](https://github.com/alibaba/transmittable-thread-local/tree/expt/hotfix-293)。 > > @Markkkkks 安装到本地,使用`TTL`版本`2.12.2-SNAPSHOT`试一下? > > ```shell > git checkout expt/hotfix-293 > > mvn install -Dmaven.test.skip > ``` 好的😊,我试试

使用hotfix版本的ttl这个问题没有重现了,thanks a lot @oldratlee > holder WeakHashMap的变更(put/remove方法) 只会在下面的方法中调用: > > TransmittableThreadLocal的get / set / remove方法 > Transmitter 的 replay / restore方法 业务代码中,在子线程`future`中调用了`remove`方法,同时主线程使用了`future.get()`方法, 可能是这个原因导致的`ConcurrentModificationException`,我尝试复现下。