2 a491316905 a491316905 于 2015.06.01 17:50 提问

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。我跟人是觉得没问题,可是程序跑出来异常。

3个回答

edouardzyc
edouardzyc   2015.06.01 17:53

多线程的话你要么用concurrenthashmap,要么在map的get,set之前锁一下

oyljerry
oyljerry   Ds   Rxr 2015.06.01 18:51

多线程你需要有锁机制来保护,不然就不安全。或者用lock-free的数据类型

llx1943llx
llx1943llx   2015.06.01 19:21

多线程运行的话确实会出现之前想不到的问题。
你的代码里没有进行任何多线程的控制,所以难免出问题。要么在程序里面用synchronized关键字,要么用Lock接口,要么改为线程安全的数据类型。

Csdn user default icon
上传中...
上传图片
插入图片