run()方法内的Java同步

时间:2013-07-06 23:21:42

标签: java synchronization

这是我的班级:

public class OnlineDataProcessor implements Runnable
{
    private final Map<String, VehicleData> recentDataMapping = new HashMap<String,VehicleData>();


    public void run()
    {
         //Here i collect data from database and create objects VehicleData and put them in recentDataMapping.
    }

    public String toXML(String vehicleId)
    {
        //Here i take VehicleData object from recentDataMapping and work with it.

    } 
}

然后在系统启动时我有这个:

OnlineDataProcessor onlineDataProcessor = new OnlineDataProcessor();  
Thread a = new Thread(onlineDataProcessor);
a.start();

然后基于servlet请求,我有这个代码:

String vehicleId = request.getParameter("vehicleId");
String str = onlineDataProcessor.toXML(vehicleId); 

所以问题是......

我是否需要同步访问run()和toXML()方法中的 recentDataMapping VehicleData 对象?

2 个答案:

答案 0 :(得分:1)

@Alex的答案不正确(由于低代表不能拒绝投票)。使地图变得不稳定在这里无济于事。您需要在同一监视器上同步对地图的读取和写入,或使用ConcurrentHashMap(假设您使用的是Java5或更高版本)

答案 1 :(得分:1)

由于您没有使用ConcurrentHashMap,因此应该同步对地图的任何访问,因为它是共享资源。您只需要将实际添加内容同步到地图中 - 所有其他工作都可以在同步部分之外完成。

如果您只想确保代码是线程安全的,请使用ConcurrentHasMap。