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取的锁的一把锁,构成同步;

你可能感兴趣的:(Synchronized关键字)