synchronized关键字怎么使用?

解决方案 »

  1.   

    synchronized{}
    synchronized(flag){}
      

  2.   

    例如 public synchronized void f(){}那么这个方法在有对象访问他时就被加锁了只有等该对象访问完毕后其他对象才能访问它
      

  3.   

    还是举例子吧int a = 1 //全局变量
    public synchronized void func(){
      a = a +1 ;
      System.out.println(a);
    }
    synchronized代表方法是同步的,没有synchronized代表是异步的
    假如有两个线程(A,B)访问这段代码
    一、同步情况:
      A先访问,只有A执行完方法fun()后,B才能访问,打印结果A是2,B是3
    二、异步情况:
      A先访问,A访问时B也能访问,有可能当A执行到a= a+1时,B也访问到a=a+1,这时a的值为3
      所以接下来A和B打印结果都是3
      

  4.   

    嗯,这个说得很清楚,需要根据实际的业务需求使用~!
    现在jdk1.5(含)版本以上的都有一个线程处理的API(java.util.concurrent),
    可以使用API就无需考虑那么多啦,API都封装好了~!
      

  5.   

    看这里
    http://lavasoft.blog.51cto.com/62575/27069/