1.使用同步块或者lock操作,数据同步的时间问题,是在a++之后就直接同步,还是在同步块结束时同步,还是之间的某个随机时刻
     
synchronized(xxx){
  a++;
  b++;
}2.假设a同时使用volatile修饰,上面哪个问题的答案3.未使用同步相关操作,会在什么时候同步,另一个线程的可见性4.对于基本类型或是引用类型的简单操作,什么是原子的,什么不是,5.对于没有同步修饰的方法,增加了return ,对原子性有什么影响跪求大神解答

解决方案 »

  1.   


    1. 在执行完synchronized 块同步
    2. 在 执行完a++之后同步
    3. 同步的时间无法判断,可见性无法判断
    4. 何谓简单操作?
    5. 对原子性没有影响 
      

  2.   

    第三个问题,同步的时间实在线程结束时,还是之间,线程再启动的时候就把共享的变量全部加载,还是用到再去加载
    第四个问题,简单操作就是赋值和返回值,例如AtomicInteger里get和set方法,a=1和a=b的区别,顺便再问下set和lazySet的区别。
      

  3.   

    4、原子性操作:
    (1)..基本类型,引用类型的赋值,引用是原子的操作;
    (2).long与double的赋值,引用是可以分割的,非原子操作;
    (3).要在线程间共享long或double的字段时,必须在synchronized中操作,或是声明成volatile.
      

  4.   

    @soton_dolphin
      

  5.   

    1.synchronized(xxx) 谁(线程A)第一个执行到这句,数据同步开始,线程A synchronized块没执行完毕,其他线程不允许运行synchronized块中的代码
    2.同1 这个a++ 属于synchronized块的子句,逃不出synchronized的五指山
    3. 不存在同步 
       同步类似于食堂盛饭只有一个勺 只能一勺一个
       不同步类似于人手一个勺,去饭桶里盛饭
    4 5目前没学到
      

  6.   


    貌似我在其他地方看到,a=b不是原子,a=1是原子,因为a=b需要先读值,再赋值
      

  7.   


    1. 在执行完synchronized 块同步
    2. 在 执行完a++之后同步
    3. 同步的时间无法判断,可见性无法判断
    4. 何谓简单操作?
    5. 对原子性没有影响 第三个问题,同步的时间实在线程结束时,还是之间,线程再启动的时候就把共享的变量全部加载,还是用到再去加载
    第四个问题,简单操作就是赋值和返回值,例如AtomicInteger里get和set方法,a=1和a=b的区别,顺便再问下set和lazySet的区别。
      

  8.   


    1. 在执行完synchronized 块同步
    2. 在 执行完a++之后同步
    3. 同步的时间无法判断,可见性无法判断
    4. 何谓简单操作?
    5. 对原子性没有影响 第三个问题,同步的时间实在线程结束时,还是之间,线程再启动的时候就把共享的变量全部加载,还是用到再去加载
    第四个问题,简单操作就是赋值和返回值,例如AtomicInteger里get和set方法,a=1和a=b的区别,顺便再问下set和lazySet的区别。第三个问题的答案就是无法判断同步的时间。
    第四个问题 除了long 和double 类型的赋值操作不是原子的,其他的赋值和取值都是原子的。