众所周知,LinkedList不是线程安全的,可以用
List list = Collections.synchronizdList(linkedlist)来得到线程安全的List.
这样多线程可以对list进行任意操作.但如果从list中得到它的subList.多线程对
list的操作却会使subList引发同步修改异常.请问有什么办法解决呢?

解决方案 »

  1.   

    将这个subList clone到一个新的LinkedList上,将这个新的LinkedList同步化!
    由于List的clone方法是浅克隆,克隆的是里面对象的引用,因而应该不会影响你的使用
      

  2.   

    但是我要的就是要subList能影响到原来list的效果啊.
      

  3.   

    subList里保存的就是原来list里的对象的引用啊,浅克隆之后你得到的还是那些对象的引用,也就是说此时你修改subList里的对象,实际上就是修改原来list里的对象
    我说不影响你的使用,就是这个意思,不是不影响原来的对象
      

  4.   

    呵呵,我明白你的意思,但我的意思是我想如果subList remove了一个Object,
    这个效果也应该能影响到原来的List,而不是单纯能改变原来的List的对象.
      

  5.   

    发现我犯了个错误,subList出来的是一个List接口对象,无法强制类型转换成ArrayList或者LinkedList的对象,而List接口是没有clone()方法的!
    我看楼主你只能在对subList进行操作之前取得List的对象锁了,也就是在方法体里加上
    synchronizd(list){
      .........
    }
      

  6.   

    我加拉。但还是不能让List和subList线程同步。
      

  7.   

    我后来的解决方案是重写了SubList类。呵呵.
      

  8.   

    是啊,Vector不是能够同步的么
      

  9.   

    得到一个 subList 再来个 Collections.synchronizedList() ; 不行么?