synchronized(this){
return a;
}括号里的this代表什么啊?

解决方案 »

  1.   

    这个跟线程安全没关系。this指当前调用对象。
    比如
     Test test = new Test();
     Test test2 = new Test();Test类有个method方法,里面用到了this,
    当你写成 test.method();时,这个this就是test,
    当你写成 test2.method();时,这个this就是test2.synchronized(this) 就是对当前调用对象同步, 用test去调用就是同步test,用test2调用就是同步test2
    如果写成synchronized(test2) 不管用谁调用,都同步test2.
      

  2.   

    this 就是指的是当前调用对象
      

  3.   

    public class User {
    private int id; /**
     * @return the id
     */
    public int getId() {
    return id;
    } /**
     * @param id the id to set
     */
    public void setId(int id) {
    synchronized(this){
    this.id = id;
    }
    }
    }
    这段代码,是不是就是在给这个字段赋值的时候,给id这个字段加锁呀,其他读的操作必须等待setId()之后再运行啊 
      

  4.   

    当然这段代码是没必要加synchronized的
      

  5.   

    不是给id加锁,是给当前的User的实例加锁
    其他读取操作如果不是synchronized的话,不会等待
      

  6.   

    那么既然给对象枷锁了,为什么其他读取操作不会等待呢(在setId执行的时候,假如时间很久)?
      

  7.   

    每个对象都有一把锁,这里的代码只是借用了this对象的锁而已,如果有特殊需要,可以新建一个专门作为锁的对象
      

  8.   

    如果static User user = new User();
    user.setId(1);那么在user.getId();的时候是不是就要等待啊 ?谢谢各位!!
      

  9.   

    是指user这个对象是静态的,也就是说持有类的所有对象的成员user都是同一个对象,如果setId方法不是线程安全的照样发生错误
      

  10.   

    this当前调用对象,锁住括号内的当前代码
      

  11.   

    this 就是指的是当前调用对象里面是一个对象,你可以换成其他的对象
      

  12.   


    没事,慢慢来,JDK 中涉及线程和线程、并发的 API 很复杂的,在国内估计也没多少人精通!
      

  13.   


    引用 2 楼 soli11722984 的回复:
    自己用自己作为锁对象
      

  14.   


    如果getId方法不是synchronized,就不会等待,因为不是synchronized就不会请求锁
      

  15.   

    简单的理解先。
    比如一个方法中第一行代码就是sychronized(this)的话。那么你可以理解成,无论多少个对象要调用这个方法,都必须等待。这里的等待可以理解成排队。
    比如一个方法是用于遍历输出不同集合的值。如果这个公共遍历方法使用了sychronized(this),假如多个集合同时需要遍历,那也需要排队,按照顺序一个一个处理。
    这样就不会出现数据混乱。。
    可以看看Vector的源码,Vector被称为线程安全,他基本上所有方法都是使用sychronized来保证“线程安装”的。
      

  16.   

    正好原来赋闲在家时还写过两篇关于多线程与同步的文章,我想应该有助楼主理解:1. 是同步方法还是 synchronized 代码?– 详解多线程同步规则2. Java 线程同步,对象锁与互斥规则注意:synchronized(this) 与synchronized(TestClass.class) 是不一样,有些时候,我们会专门声明一个静态的变量,如 static lock = new Object(); 来当成锁,然后是 synchronized(lock).要理解什么时候获得锁,什么时候释放,什么时候别的线程可以进来,等等,多多交流。
      

  17.   

    反正synchronized是同步化操作,记着这个就行