CPU|java面试——常见的锁和锁升级( 三 )
mySpinLock.lock();
mySpinLock.unLock();
\"B\").start();
输出:
A got the lock
B try to get Lock
B try to get Lock
B try to get Lock
B try to get Lock
B try to get Lock
B try to get Lock
B try to get Lock
B try to get Lock
B try to get Lock
B try to get Lock
A want to Unlock
A Unlock
B got the lock
B want to Unlock
B Unlock
compareAndSet方法举例理解public class visit implements Runnable {
// private boolean someone = false;
private AtomicBoolean someone = new AtomicBoolean();
@Override
public void run() {
//它可以将引用与预期值(引用)进行比较 , 如果它们相等 , 则在AtomicReference对象内设置一个新的引用
if (someone.compareAndSet(false true)) {
System.out.println(Thread.currentThread().getName()
+ \": after judgmentthe someone is \" + someone);
try {
Thread.sleep(1 * 1000);
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(Thread.currentThread().getName()
+ \" i am coming\");
System.out.println(Thread.currentThread().getName()
+ \" i have to leaving\");
someone.set(false);
else {
System.out.println(Thread.currentThread().getName()
+ \" i can't visit the house\");
public static void main(String[
args) {
visit st = new visit();
new Thread(st \"thread_1\").start();
new Thread(st \"thread_2\").start();
输出结果
可以看出 , 当线程1执行期间 , 线程2是进不去的compareAndSet即 cas
备注:jvm只是一个协议 , 具体的实现有我很多:
描述一下对象在内存中的布局new 一个object对象 , main方法就是一个栈针 , 里面有一个object对象的引用 , 指向堆内存中的object对象
java object layout
- pom依赖
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>
- 业务代码
public static void main(String[
args) {
int size = 10;
List<Integer> list = new ArrayList<Integer>(size);
for (int i = 0; i < size; i++) {
list.add(i);
//打印实例内部的占用
System.out.println(ClassLayout.parseInstance(list).toPrintable());
输出结果:offset起始位
对象头
推荐阅读
- 计算机专业大一下学期,该选择学习Java还是Python
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 2021年换手机哪个配置最重要,CPU只能排第三位
- 8核Zen3 AMD新CPU现身:锐龙7 5700G
- 全新8核国产CPU深入探秘:马上能买到
- 学习大数据是否需要学习JavaEE
- "二八定律"难破 CPU市占率英特尔持续占优
- AMD台式机CPU市场份额15年来首次超越英特尔
- 英特尔Z590平台Logo曝光 酷睿i9-11900K CPU-Z跑分揭晓
- 从事Java开发时发现基础差,是否应该选择辞职自学一段时间
