zoukankan      html  css  js  c++  java
  • 如何同步共享同一个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 进行增加,删除的.

  • 相关阅读:
    二分法扩展——就近查找
    Right Dominant Elements问题
    数组循环左移
    两个有序序列的中位数
    装箱问题
    IDEA中Tomcat热部署不生效问题解决办法
    H2数据库简单使用操作
    常用网站
    Spring Framwork Maven dependency
    报错Too many connections
  • 原文地址:https://www.cnblogs.com/predisw/p/4910459.html
Copyright © 2011-2022 走看看