面试刷题16:synchronized和ReentrantLock的区别?
java并发编程是程序员基本技能。 我是李福春,我在准备面试,今天的题目是: synchronized和ReentrantLock的区别? 这两货都是java提供的同步机制,提供了互斥语义和可见性,当一个线程获得资源之后,其它竞争资源的线程必须等待或者堵塞。 区别如下: 线程安全 线程安全说的是多线程场景下,共享可修改状的数据的正确性。 从语义来看,保证线程安全的方法有2: 1, 封装起来,数据不共享,私有化。 2, 数据不可修改,自然不存在线程不安全。final,immutable; 线程安全的3个特性: 隔离性: 相关操作不会被其它线程干扰 顺序性: 线程内的串行语义,避免指令重排; 可见性: 线程的本地变量修改应该反馈到主内存上,使用volatile关键字。 先来看一个线程不安全的例子: package org.example.mianshi.concurrent; /** * 线程不安全例子,共享数据sharedState * @author lifuchun */ public class ThreadSafeSample { public int sharedState; public void nonSafeAction() { while (sharedState < 100000) { int former = sharedState++; int latter