主线程初始化的时候我会一个 static map 进行付值   然后启动多个子线程会 读取 static map   当我主线程去更新 这个static map 的时候! 我想加一个更新锁,也就是在我主线程第二次更新 static map  中 我不希望其他子线程去读取 (加一个锁),
想问一下具体怎么实现!谢谢

解决方案 »

  1.   

      加一个控制..当这个文件进度满时其他线程start 或者时间控制.
      

  2.   

        加一个控制..当这个文件进度满时其他线程start   或者时间控制. 
    关键是 我子线程 是不停的会去取 从static map 里面的值  所以不会取重新启动子线程 嘿嘿 
      

  3.   

    我给一个思路private static Boolean isUpdate = false;public Map getMap(){
     while(isUpdate){
       try{
         Thread.sleep(1000); // 等待1秒,时间你自己设
       }catch(Exception ex){}
     }
     return map;
    }public void updateMap(Map mapNew){
      isUpdate = true; // 加上标志
      ....// 你的更新操作
      isUpdate = false; // 去掉标志
    }
      

  4.   

    提示一句,访问属性最好通过 get/set 方法,方面你进行控制,如果你采用
    manager.map 直接读取的,你就得修改这种方法了,同时把管理类的map 设置为 private
      

  5.   

    我直接是  是  
    public static Map zoneIDMap = new TreeMap();   //营销区域id 对应的小区celljava 能不能 更新zoneIDMap 的时候  加一个锁来管理
    楼上说的那种管理机制可能会有问题! 我是多线程进行并发的  
      

  6.   

    public class MainThread 
    {
      public  long data=0;
      public static boolean flag= true;
      public MainThread() 
      {
        SubThread sub1=new SubThread("Sub1",this);
        sub1.start();
        SubThread sub2=new SubThread("Sub2",this);
        sub2.start();
        SubThread sub3=new SubThread("Sub3",this);
        sub3.start();
      }
      public void startSubThread() 
      {
        try
        {
          while (true) 
          {
            flag = false;
            data = data + 1;
            flag = true;
          }
        }
        catch(java.lang.Exception e)
        {
          e.printStackTrace();
        }
      }
      public static void main(String arg[])
      {
        MainThread main = new MainThread();
        main.startSubThread();
      }
    }
    class SubThread extends java.lang.Thread
    {
        String classname ="";
        MainThread main=null;
        public SubThread(String classname,MainThread main)
        {
          this.classname = classname;
          this.main= main;
        }
        public void run()
        {
          try
          {
          while(true)
          { 
             
            if(main.flag)
             System.out.println(classname +" data:"+main.data);
          }
         }
         catch(java.lang.Exception e)
         {
           e.printStackTrace();
         }
        }
    }
      

  7.   

    java   能不能   更新zoneIDMap   的时候     加一个锁来管理 ??你的访问方式决定了那些线程不会采用什么锁的,因为他们直接读取。我的方法没有问题,在没有更新操作的时候,各线程能很好的工作。
    while(isUpdate){  // 如果不是更新,会直接返回的!