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 进行增加,删除的.

  • 相关阅读:
    第一个java程序
    Java安装
    Maven安装
    Effective Java 3
    gateway + jwt 网关认证
    idea的使用
    线程池的使用
    服务注册发现Eureka
    zookeeperAPI的常用方法
    sss
  • 原文地址:https://www.cnblogs.com/predisw/p/4910459.html
Copyright © 2011-2022 走看看