问题描述
- java 多线程问题 变量问题
-
for(Iterator>> iterator = cursorMap.entrySet().iterator();iterator.hasNext();){
final Entry> entry = (Entry>)iterator.next();
final String fileName = entry.getValue().get("fileName")+".cursor";
logger.info(entry.getValue().get("fileName")+" etl start");
scheduleServiceMap.get(entry.getValue().get("fileName")).scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
LongCursor cursor = null;
try {
Entry> cursorEntry = entry;
read(fileName);} catch (Throwable e) { } } }, 0, delay, TimeUnit.MILLISECONDS); } 这样 entry和fileName是否线程安全,我想要达到一个线程一个entry和fileName。我跟人是觉得没问题,可是程序跑出来异常。
解决方案
多线程的话你要么用concurrenthashmap,要么在map的get,set之前锁一下
解决方案二:
多线程你需要有锁机制来保护,不然就不安全。或者用lock-free的数据类型
解决方案三:
多线程运行的话确实会出现之前想不到的问题。
你的代码里没有进行任何多线程的控制,所以难免出问题。要么在程序里面用synchronized关键字,要么用Lock接口,要么改为线程安全的数据类型。
时间: 2024-11-01 18:31:26