1.需要线程同步的原因:
Java 中允许多线程并行访问,同一时间段内多个线程同时完成各自的操作。但是多个线程同时操作同一个共享数据时,可能会导致数据不准确的问题。
2.线程同步的方法:
可以通过 synchronized 关键字修饰方法实现线程同步,每个Java 对象都有一个内置锁,内置锁会保护使用 synchronized 关键字修饰的方法,要调用该方法就必须先获得锁,否则就处于阻塞状态。
3。synchronized 关键字可以修饰实例方法,也可以修饰静态方法,两者在使用的时候是有区别的。
(1)给实例方法(非静态方法)添加 synchronized 关键字并不能实现线程同步。
(2)线程同步的本质是锁定多个线程所共享的资源,synchronized 还可以修饰代码块,会为代码块加上内置锁,从而实现同步。
4.如何判断线程是否同步?
(1)关键点:
锁定的资源在内存中是一份还是多份?一份大家需要排队则线程同步,多份则线程不同步。(无论是锁定方法还是锁定对象,锁定类,只需要分析这个方法、对象、类在内存中有几份即可)。
(2)常见的
对象一般都是多份,类一定是一份。
方法看是静态方法还是非静态方法,静态方法一定是一份,非静态方法一般是多份。