1、针对第一个因素,JDK里面提供了很多atomic类, AtomicLong, AtomicBoolean等等,这些类本身可以通过CAS来保跷高瘴玷证操作的原子性;Java也提供了锁机制,锁内的代码块在同一时刻只能有一个线程执行,例如synchronized关键字。
2、针对第二个因素,可用synchronized关键字加锁保证,将操作共享数据的语句加入synchronized关键字,同一时刻只能有一个线程执行,直到完成。也可用volatile关妗哳崛搿键字,可以保证修改共享数据后对其他线程可见。
3、针对第三个因素可以使用Lock锁。Lock锁很灵活,但需要手动释放和开启。在并发量比较高的情况下,Lock锁优于synchronized关键字。