Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

java synchronized关键字原理 PDF 下载


分享到:
时间:2024-05-03 10:22来源:http://www.java1234.com 作者:转载  侵权举报
java synchronized关键字原理
失效链接处理
java synchronized关键字原理 PDF 下载 
 
 
 
相关截图:
 


主要内容:

synchronized关键字原理
自己来实现一个同步
自旋实现一个同步
定义一把锁来实现同步
 
package com.shadow.util;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import sun.misc.Unsafe;
import java.lang.reflect.Field;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.AbstractQueuedSynchronizer;
import java.util.concurrent.locks.ReentrantLock;
@Slf4j(topic = "e")
public class ShadowLock {
volatile int state=0;//标识---是否有线程在同步块-----是否有线程上锁成功
static Unsafe unsafe;//unsafe 对象,因为cas操作需要这个对象
private static long stateOffset;//state这个字段在ShadowLock对象当中的内存偏移量
/**
* 1、获取unsafe对象,这个对象的获取稍微有点复杂,目前不需要关心
* 2、通过unsafe对象得到state属性在当前对象当的偏移地址
*/
static {
try {
unsafe = getUnSafe();
stateOffset = unsafe.objectFieldOffset
(ShadowLock.class.getDeclaredField("state"));
} catch (Exception e) {
e.printStackTrace();
}
}
//获取unsafe对象
public static Unsafe getUnSafe() throws NoSuchFieldException,
IllegalAccessException {
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
return (Unsafe) theUnsafe.get(null);
}
//cas 修改state的值
//expect预期值,如果相同则把state的值改成x 原子操作
public boolean compareAndSet(int expect,int x){
return unsafe.compareAndSwapInt(this, stateOffset, expect, x);
};
//加锁方法
@SneakyThrows
public void lock(){
//compareAndSet方法如果返回false 加锁失败整个while->true
//compareAndSet方法如果返回true 加锁成功整个while->false
while(!compareAndSet(0,1)){//加锁失败
log.debug("lock fail");
//这个睡眠是没有什么意义的,只是视觉效果好一点
TimeUnit.MILLISECONDS.sleep(300);
}
//加锁成功
log.debug("lock success");
}
public void unlock(){
log.debug("unlock success");
//思考这里为什么不要cas?
state=0;
}
}

 

 

 
 
 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐