java多线程 参数已经传入构造方法 进入run方法时参数却被改变

请教各位大神:我在for循环里面执行线程,遇到一个问题,代码如下:
private static final ExecutorService executors = Executors.newScheduledThreadPool(10);
......
for(...){
executors.execute(new PublishThread(map));
}
PublishThread实现了Runnable方法,它有一个私有成员变量map,在PublishThread有一个构造函数,接受了上面的map参数,并将它赋给私有成员变量map。调试的时候发现到构造函数里面时,map值与for循环里面传过来的值是匹配的,但是到run方法里面时,map里面的值却被改变。比如3次for循环传进的参数分别为:{classId=10295, class_ids=[10295, 10325, 10327]},{classId=10292, class_ids=[10292]},{classId=10293, class_ids=[10293]},但是3次run里面看到的值确是{classId=10295,, class_ids=[10293]},{classId=10292,, class_ids=[10293]},{classId=10293,, class_ids=[10293]},这已经不是顺序乱掉的问题(顺序乱本正常),而是变量里面乱了。请问这有可能是什么原因导致的呢?有什么措施可以让这个map不被改变?