Synchronized关键字

指标:理解synchronized的含义、明确synchronized关键字修饰普通方法、静态方法和码块时锁对象的差异


1:方法内的变量是线程私有的,不存在同步问题

2:明确概念,需要使用synchronized说明是需要数据共享

3:脏读概念?即线程不安全造成的数组被覆盖出错等脏数据问题

4:多线程单对象,即多个线程操作单个对象的的实例变量,需要使用synchronized来进行数据同步

5:多线程多对象非静态,异步执行,因为锁的是对象,锁不同,不构成同步机制,算异步执行

6:多线程多对象静态,锁的是类,构成同步机制,需要数据同步

classA{

public synchronized void a(){

 }

public synchronized void b(){ 

}

}

然后创建两个对象

A a1 =newA();A a2 =newA();

然后在两个线程中并发访问如下代码

Thread1 Thread2

a1.a(); a2.a();

请问二者能否构成线程同步?

问题二:如果A的定义是下面这种呢?

classA{ 

public static synchronized void a(){   

 }

public static synchronized void b(){ 

   }

}

解答一:不构成同步,这属于多线程多对象的问题,取得的锁的对象锁,a1对象锁和a2对象锁,2把锁不同,异步执行,不需要做线程的数据同步

解答二:构成同步,这也是多线程多对象的问题,但是因为是静态方法,因此加的锁的类锁,类锁可以对类的所有对象实例起作用,因此a1和a2取的锁的一把锁,构成同步;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本人主要是结合《Java多线程编程核心技术》这本书的第二章内容,对synchronized关键字的知识进行梳...
    码字与律动阅读 902评论 0 4
  • 在 java 设计中,每一个对象自打娘胎里出来就带了一把看不见的锁,即 monitor 锁。 Monitor 是线...
    一凡呀阅读 4,912评论 0 4
  • 一、概述 在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原...
    M_JCs阅读 430评论 0 0
  • 成长功课第58天:觉察自己给予他人的心,支持他人的心,去体验自己的感受是什么。 在物质方面,给予他人还是不够大方,...
    wangjb_a9e9阅读 689评论 0 1
  • 第一次使用简书,mark一下冬天里的并不特殊的一天。 帝都雾霾的力度在今天仍然可畏,但是面对下班以后有机会出去玩耍...
    文青雨阅读 183评论 0 0