• 如何同步共享同一个list


    例如多个线程要从同一个list 中取对象,别的线程取了,其他线程则不可以再去这个对象.

    1.同步多线程 对 LinkList 的removeFirst()的操作或者 其他List 的remove 再get第一个对象 的方法来实现.

    class SendSmsTask implements Runnable{
    
            private LinkedList<TMessage> smsList;
            private Port port;
    
             public SendSmsTask( LinkedList<TMessage> smsList,Port port) {
                 this.smsList=smsList;
                 this.port=port;
            }
            
            @Override
            public void run() {
    
                while(true){
                    TMessage sms=null;
                    synchronized (smsList) {   //对取对象同步
                        if(!smsList.isEmpty()) 
                        sms=smsList.removeFirst();
                        else
                            break;
            
                     port.send(sms);
                    }
        
        
    
            }
    
    }    

    2.对list 分段,每个线程处理其中一段...

    第一个线程 处理 list index 为 0-2500的对象

    第二个线程 处理 list index 为 2500-5000的对象

    3.注意: 

    CopyOnWriteArrayList

    这个是同步的list,但是不能达到想要的目的.因为这里同步实现的方法是通过在多线程中复制原来的数组来实现的.在不同的线程中的迭代器是独立的.还有就是迭代的时候是不能对这个list 进行增加,删除的.

  • 相关阅读:
    js触摸屏案例
    Docker
    Docker 镜像加速
    Docker 命令大全
    linux gpasswd
    Docker基础教程
    PHP输出毫秒时间戳
    PHP Variable handling 函数
    Partition Array by Odd and Even
    Median
  • 原文地址:https://www.cnblogs.com/predisw/p/4910459.html
Copyright © 2020-2023  润新知