开发者社区> 问答> 正文

请问如何保证每个线程内部共享变量的安全?:报错

多线程任务处理时,如何保证每个线程内部共享变量且线程间安全? 多线程任务,处理流程相同,每个线程任务对应一个配置文件,流程开始先读取配置文件加载数据到内存成为共享变量直到线程结束,请问如何保证每个线程内部共享变量的安全?:报错

多线程任务,处理流程相同,每个线程任务对应一个配置文件,流程开始先读取配置文件加载数据到内存成为共享变量直到线程结束,请问如何保证每个线程内部共享变量的安全?

目前本人的方法是把变量存到ThreadLocal中,但是这个变量的数据较大,每个线程都在 ThreadLocal中存放变量貌似有问题,各位帮忙想想办法吧····

展开
收起
kun坤 2020-06-06 15:43:43 744 0
1 条回答
写回答
取消 提交回答
  • 首先要搞清楚配置文件之间的关系。

    是一个线程只访问一个配置文件?还是一个线程可以访问所有的配置?

    感觉你需要在共享变量这块进行解耦合。

     

    1.你的这个配置是否肯定不会被修改。

    如果是,那么可以考虑直接用单例模式。

    2.变量是否是确定的?

    如果不是,那么用单例模式的concurrentHashMap也行。

    3.如果每个线程的配置文件都不一样,那么只能放在每个线程里面。

    目前按你的介绍,应该只能用ThreadLocal,或者用ioc,把配置对象作为线程对象的构造函数的一个参数打进去。

    ######回复 @Kwin : 变量不需要绑定到线程啊。直接用单例模式。Config.getInstance().get("key")就行吧。######一个线程可以访问一个或者多个配置文件,主要是让线程知道自己的共享变量就行,这个变量封装的是一个索引库的信息,一个线程会多次调用这个索引库变量。。。。另外你说的concurrentHashMap,应该怎么动态封装这个变量并绑定到线程呢?######用threadlocal 可以添加jvm参数设置线程栈大小啊
    2020-06-06 15:43:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
多线程 立即下载
原子变量与内存模型 立即下载

相关实验场景

更多