关于synchronized的参数问题:最基本的需要是它必须是一个对象。比如用int变量就不行。其次,个人认为也是最重要的,它必须是造成同步的对象。比如你发现了因为某个对象的原因而造成方法不能重入,这时候就要以这个对象为synchronized的参数。

解决方案 »

  1.   

    可否请anod给个例子加以说明?多谢.
      

  2.   

    这要根据时间情况啊,看你程序是想对那个对象加锁,
    如上synchronized(lockObject)是对lockObject对象进行加锁,防止lockObject对被调用
    而修改了共享变量
      

  3.   

    比如,我现在在servlet中需要对一个全局变量:indexNo更改,
    于是,我需要用同步方法锁定它,然后来修改indexNo,
    如下所示:
    public class MyServlet extends HttpServlet { private static int indexNo = 0;//全局变量 public void doPost(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
          synchronized("xxxxxx")  //就是这里的参数!!!!
          {
            indexNo +=1;  
          }
      }
    }
    我想请问一下"lhw99(laoliu)"和"wzrlover(无语无声无欲无泪吾独行!)"
    这个xxxx处到底如何填写,是根据什么来的,为什么?
       不要光说起来容易,(ps操作系统我三年前就学过)。
      

  4.   

    请问我这个例子该如何填写啊?!!!!
    比如,我现在在servlet中需要对一个全局变量:indexNo更改,
    于是,我需要用同步方法锁定它,然后来修改indexNo,
    如下所示:
    public class MyServlet extends HttpServlet { private static int indexNo = 0;//全局变量 public void doPost(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
          synchronized("xxxxxx")  //就是这里的参数!!!!
          {
            indexNo +=1;  
          }
      }
    }
    这个xxxx处到底如何填写,是根据什么来的,为什么?
    没有人给出实质性的回答吗?
      

  5.   

    好久没用同步了,据我当时学习时候的理解,synchronized("xxxxxx")可以是任何一个对象实例,只要保证它一直是同一个,就能起到同步的作用。比如你String a = new String();,然后就可以synchronized(a),就这样。
      

  6.   

    synchronized(this)  
    {}
      

  7.   

    synchronized()中的参数就是你需要同步的对象
      

  8.   

    synchronized("xxxxxx")中xxxxxx是你要同步修改的变量所属的对象。比如你有一个变量Xxx a,该变量a属于对象B,那么这时就写作:synchronized(B){
        ......
        //修改a
    }