我很不理解这个方法的作用

解决方案 »

  1.   

    释放对象锁的情况:synchronized()语句块执行完,synchronized()语句块出现异常、持有锁的线程调用该对象的wait()方法。
      

  2.   

    多个线程同时访问同一个资源,如果线程之间协调不好的话,
    很容易出现前后数据不一致的情况。要想处理好这种情况
    可以使用线程同步。线程同步可以保证当一个线程(例如叫A线程)在访问
    一个资源的时候,其他的线程只能暂时的等待,当A线程把任务完成后才轮到其他的线程。可以在方法前面加一个synchronized关键字比如说:
      class Test {
       synchronized void add() {
        
       }
    }
    这样的话,当A线程来执行这个add方法时,
    A线程会把当前对象(也就是Test类的一个实例对象)给锁住了拿到了
    这个对象的锁。这样的话,其他线程暂时无法拿到这个对象的锁,就没有办法
    访问add方法,只能乖乖的等待,等A线程执行完后,释放了该对象的锁之后,才轮到其他线程来
    执行add方法。
      

  3.   

    有个很精点的例子,就是生产者与消费者的模型,生产与消费之间有一个缓冲仓库,仓库就是用同步实现的,
    public String push_pro(String pro){   //生产
         lock.lock() //加锁
         while(仓库==满){
            生产者线程等待;
         }
         生产产品;
         仓库+1;
         lock.unlock();
         return pro;
     }public String get_pro(){  //消费
          lock.lock() //加锁
         while(仓库==空){
            消费者线程等待;
         }
         消费产品;
         仓库-1;
         lock.unlock();
         return pro;
    }也可以用synchronized来实现。呵呵,2楼的说的很好!