当前位置: 首页 > news >正文

wordpress分站点怎么做网站不被发现

wordpress分站点,怎么做网站不被发现,网站建设店,网站建设提供了哪些栏目synchronized关键字的使用和原理 synchronized#xff1a;对象锁#xff0c;保证了临界区内代码的原子性#xff0c;采用互斥的方式让同一时刻至多只有一个线程能持有对象锁#xff0c;其它线程获取这个对象锁时会阻塞#xff0c;保证拥有锁的线程可以安全的执行临界区内…synchronized关键字的使用和原理 synchronized对象锁保证了临界区内代码的原子性采用互斥的方式让同一时刻至多只有一个线程能持有对象锁其它线程获取这个对象锁时会阻塞保证拥有锁的线程可以安全的执行临界区内的代码不用担心线程上下文切换。 1、使用方式 锁对象理论上可以是任意的唯一对象 package com.jtc.fe;public class synchronizedDemo {// 同步静态方法 —— 锁住class类对象 —— 全局唯一synchronized public static void func1(){}// 同步方法 —— 锁住实例对象 —— 每个实例都可以当锁synchronized public void func3(){}// 同步代码块public void func2(){// —— 锁住class类对象 —— 全局唯一synchronized (synchronizedDemo.class){}}public void func4(){// —— 锁住实例对象 —— 每个实例都可以当锁synchronized (this){}}public void func5(){// —— 锁住字符串123synchronized (123){}} }注意 synchronized 修饰的方法的不具备继承性所以子类是线程不安全的如果子类的方法也被 synchronized 修饰两个锁对象其实是一把锁而且是子类对象作为锁。 2、锁原理 Java的对象由三部分组成对象头 实例数据 对齐填充。 2.1、对象头 64位对象头由Mark Word、Class Pointer两部分组成如果对象是数组则还要加上数组长度即三部分组成。 Mark Word用于存储对象自身的运行时数据如哈希码HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。由于对象需要存储的运行时数据很多但64位虚拟机给它的空间只有64位Bitmap所以Mark Word被设计成一个有着动态定义的数据结构即不同的锁状态存储内容不同。 如果要查看内存结构图需要引入依赖 dependencygroupIdorg.openjdk.jol/groupIdartifactIdjol-core/artifactIdversion0.9/version /dependencyimport com.example.demo.User; import org.openjdk.jol.info.ClassLayout;public class p6 {static User user new User();static User[] users new User[10];public static void main(String[] args) {System.out.println(ClassLayout.parseInstance(user).toPrintable());System.out.println(*******************************************);System.out.println(ClassLayout.parseInstance(users).toPrintable());} }Mark Word由64位8个字节组成。Class Pointer由64位8个字节组成但我们使用的64位 JVM会默认使用选项 UseCompressedOops 开启指针压缩将指针压缩至32位。即上面截图中的Class Pointer为4个字节32位。 如果在打印对象头前调用HashCode方法则会变成如下 从MarkWord的结构可以看出在无锁阶段内存分布与上图是一一对应的HashCode也是一一对应的。 2.2、锁升级 synchronized 是可重入、不公平的重量级锁所以可以对其进行优化。 无锁 - 偏向锁 - 轻量级锁 - 重量级锁 // 随着竞争的增加只能锁升级不能降级 其中重量级锁还需要Monitor对象配合使用偏向锁 偏向锁的思想是偏向于让第一个获取锁对象的线程这个线程之后重新获取该锁不再需要同步操作当锁对象第一次被线程获得的时候进入偏向状态使用 CAS 操作将线程 ID 记录到 Mark Word。 轻量级锁 当有另外一个线程去尝试获取这个锁对象时偏向状态就宣告结束此时撤销偏向Revoke Bias后恢复到未锁定或轻量级锁状态。一个对象有多个线程要加锁但加锁的时间是错开的没有竞争可以使用轻量级锁来优化轻量级锁对使用者是透明的不可见。 重量级锁 在尝试加轻量级锁的过程中CAS 操作无法成功可能是其它线程为此对象加上了轻量级锁有竞争这时需要进行锁膨胀将轻量级锁变为重量级锁。 在重量级锁阶段每个 Java 对象都可以关联一个 Monitor 对象Monitor 也是 class其实例存储在堆中如果使用 synchronized 给对象上锁之后该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针这就是重量级锁。 工作流程 开始时 Monitor 中 Owner 为 null 当 Thread-2 执行 synchronized(obj) 就会将 Monitor 的所有者 Owner 置为 Thread-2Monitor 中只能有一个 Ownerobj 对象的 Mark Word 指向 Monitor把对象原有的 MarkWord 存入线程栈中的锁记录中 在 Thread-2 上锁的过程Thread-3、Thread-4、Thread-5 也执行 synchronized(obj)就会进入 EntryList BLOCKED双向链表 Thread-2 执行完同步代码块的内容根据 obj 对象头中 Monitor 地址寻找设置 Owner 为空把线程栈的锁记录中的对象头的值设置回 MarkWord 唤醒 EntryList 中等待的线程来竞争锁竞争是非公平的如果这时有新的线程想要获取锁可能直接就抢占到了阻塞队列的线程就会继续阻塞 WaitSet 中的 Thread-0是以前获得过锁但条件不满足进入 WAITING 状态的线程wait-notify 机制 2.3、代码字节码 修饰代码段时 public static void main(String[] args) {Object lock new Object();synchronized (lock) {System.out.println(ok);} }0: new #2 // new Object 3: dup 4: invokespecial #1 7: astore_1 8: aload_1 9: dup 10: astore_2 11: monitorenter // 【将 lock对象 MarkWord 置为 Monitor 指针】 12: getstatic #3 15: ldc #4 17: invokevirtual #5 20: aload_2 21: monitorexit // 【将 lock对象 MarkWord 重置, 唤醒 EntryList】 22: goto 30 25: astore_3 26: aload_2 27: monitorexit // 【将 lock对象 MarkWord 重置, 唤醒 EntryList】 28: aload_3 29: athrow 30: return Exception table:from to target type12 22 25 any25 28 25 any LineNumberTable: ... LocalVariableTable:Start Length Slot Name Signature0 31 0 args [Ljava/lang/String;8 23 1 lock Ljava/lang/Object;从上面我们可以看出synchronized 同步语句块的实现使用的是 monitorenter 和 monitorexit 指令其中 monitorenter 指令指向同步代码块的开始位置monitorexit 指令则指明同步代码块的结束位置。其中两个 monitorexit 指令是为了保证锁在同步代码块代码正常执行以及出现异常的这两种情况下都能被正确释放。 修饰方法时 public synchronized void method() {System.out.println(synchronized 方法); }JVM 通过该 ACC_SYNCHRONIZED 访问标志来辨别一个方法是否声明为同步方法如果是实例方法JVM 会尝试获取实例对象的锁。如果是静态方法JVM 会尝试获取当前 class 的锁。 总结 synchronized 同步语句块的实现使用的是 monitorenter 和 monitorexit 指令修饰方法是 ACC_SYNCHRONIZED 标识。 不过两者的本质都是对对象监视器 Monitor 的获取。 参考https://github.com/Seazean/JavaNote/blob/main/Prog.md https://blog.csdn.net/zhaocuit/article/details/100208879?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170239663116800182715111%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257Drequest_id170239663116800182715111biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2alltop_positive~default-1-100208879-null-null.142v96pc_search_result_base9utm_termjava%E5%AF%B9%E8%B1%A1%E5%A4%B4spm1018.2226.3001.4187
http://www.tj-hxxt.cn/news/232397.html

相关文章:

  • 郑州微网站建设公司网站开发人员需求
  • 上海 网站设计公司旅游便宜网站建设
  • 汕头网站建设推广价格网站收录有什么用
  • 免费引流app下载安徽网站关键字优化
  • 关于加强门户网站建设用vue框架做的网站
  • 重庆云阳网站建设公司网站上有什么作用
  • 北京做网站的开发公司nginx wordpress配置静态化
  • 婴儿衣服做的网站好跨境电商公司取名
  • 房产网站案例网站建设总体说明
  • 宜春住房和城乡建设部网站网上智慧团建网站登录
  • 亚马逊品牌网站要怎么做惠州双语网站建设费用
  • 网站设置301解除移动屏蔽上海网站开发一对一培训价格
  • 安徽手机版建站系统信息wordpress怎样更改文章阅读次数
  • 辅助网站建设网站开发时
  • qq群怎么推广起来最快宁波seo企业网络推广
  • 网站建设的发展序列app开发公司的困难
  • 朝阳做网站公司动易网站 设置背景图片
  • 建设兵团12师教育局网站wordpress如何播放视频播放
  • php网站搬家软件网站开发与维护宣传册
  • 网站建设各语言优点做变性手术视频网站
  • 做木工的网站做网站哪个服务商便宜
  • 临桂县住房和城乡建设局网站永年做网站
  • 备案时网站名称怎么写g3云推广是哪家公司的
  • 做公众号的模版的网站小程序开发者工具
  • 深圳永久免费网站建设哪个好南昌网站开发技术
  • 音乐网站建设方案网站手机访问 动易
  • 自己创建网站403怎么查房产信息查询
  • 设计工作网站wordpress自动升级
  • 移动论坛网站模板北京seo网站结构优化
  • 个人可以注册网站吗我做网站啦 圆通导航