线程同步——使用(synchronized)关键字

1.需要线程同步的原因: Java 中允许多线程并行访问,同一时间段内多个线程同时完成各自的操作。但是多个线程同时操作同一个共享数据时,可能会导致数据不准确的问题。

2.线程同步的方法: 可以通过 synchronized 关键字修饰方法实现线程同步,每个Java 对象都有一个内置锁,内置锁会保护使用 synchronized 关键字修饰的方法,要调用该方法就必须先获得锁,否则就处于阻塞状态。

3。synchronized 关键字可以修饰实例方法,也可以修饰静态方法,两者在使用的时候是有区别的。 (1)给实例方法(非静态方法)添加 synchronized 关键字并不能实现线程同步。 (2)线程同步的本质是锁定多个线程所共享的资源,synchronized 还可以修饰代码块,会为代码块加上内置锁,从而实现同步。

4.如何判断线程是否同步? (1)关键点: 锁定的资源在内存中是一份还是多份?一份大家需要排队则线程同步,多份则线程不同步。(无论是锁定方法还是锁定对象,锁定类,只需要分析这个方法、对象、类在内存中有几份即可)。 (2)常见的 对象一般都是多份,类一定是一份。 方法看是静态方法还是非静态方法,静态方法一定是一份,非静态方法一般是多份。

经验分享 程序员 微信小程序 职场和发展