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

曲靖网站开发大连 建网站

曲靖网站开发,大连 建网站,广州达美网站建设公司,公司黄页是官网吗目录 1、synchronized是什么 2、synchronized的用法 synchronized可以用在方法或者代码块上#xff0c;分别称为同步方法和同步代码块。 用法理解 3、synchronized的实现原理 ⭐synchronized锁的对比 4、synchronized的优缺点 ⭐扩展#xff1a;synchronized 和 vola…目录 1、synchronized是什么 2、synchronized的用法 synchronized可以用在方法或者代码块上分别称为同步方法和同步代码块。 用法理解 3、synchronized的实现原理 ⭐synchronized锁的对比 4、synchronized的优缺点 ⭐扩展synchronized 和 volatile 的区别 ⭐扩展synchronized与Lock的区别 小结 1、synchronized是什么 synchronized 是Java中的一个关键字用于实现线程间同步。它可以被用来修饰方法或代码块使得同一时刻只有一个线程可以执行被 synchronized 修饰的代码。 在Java中当多个线程并发执行时可能会出现数据竞争和不一致的情况。为了避免这种情况的发生我们需要对共享变量进行同步控制以保证同一时刻只有一个线程能够访问共享变量。 具体地说当一个线程进入一个被 synchronized 修饰的方法或代码块时它会尝试获取这个方法或代码块所属对象的锁也称为监视器锁如果获取不到锁就会阻塞等待。当另一个线程执行完该方法或代码块并释放了锁之后等待的线程才能获取到锁并继续执行。 synchronized 的使用可以有效地避免多个线程同时访问共享变量造成的问题但也会引入一定的性能损耗。因此在需要进行线程同步时建议使用 synchronized 来实现。但在高并发场景下也可以考虑使用更轻量级的锁例如 ReentrantLock 或 Atomic 类。 图片来源https://www.cnblogs.com/three-fighter/p/14396208.html 2、synchronized的用法 synchronized可以用在方法或者代码块上分别称为同步方法和同步代码块。 如果修饰的是普通方法则锁作用于当前对象实例。如果是修饰静态方法锁作用于类的Class实例。如果修饰的是代码块作用于当前对象实例则需要指定加锁对象。 1. 同步代码块使用 synchronized 关键字修饰的代码块可以指定一个对象作为锁只有获得该锁的线程才能执行代码块。 synchronized后面括号里是一对象,此时,线程获得的是对象锁.例如: public classMyThread implements Runnable{public static void main(Stringargs[]){MyThread mtnew MyThread();Thread t1newThread(mt,t1);Thread t2newThread(mt,t2);Thread t3newThread(mt,t3);Thread t4newThread(mt,t4);Thread t5newThread(mt,t5);Thread t6newThread(mt,t6);t1.start();t2.start();t3.start();t4.start();t5.start();t6.start(); } public void run(){synchronized(this){System.out.println(Thread.currentThread().getName());} } public void method() { synchronized (lockObject) { //一次只能有一个线程进入 // 执行的代码 } } 在上述代码中lockObject 是一个任意的对象它将作为锁来确保同步。只有获取到 lockObject 对象的锁的线程才能执行同步代码块。 2. 同步方法使用 synchronized 关键字修饰的方法整个方法都会被视为同步代码块同一时间只允许一个线程执行该方法。 public synchronized void synchronizedMethod() {// 需要同步的方法体 }其中锁对象可以是任意对象只要在多个线程间能保持唯一性即可。通常我们使用被访问对象的引用作为锁对象以保证同一时刻只有一个线程可以访问该对象的相关操作。 需要注意的是同步方法的锁是当前对象实例即 this而同步代码块可以指定任意的对象作为锁。在使用 synchronized 关键字时需要选择合适的锁对象来确保线程安全并避免死锁和性能问题。 用法理解 图片来源synchronizedJava语言的关键字_百度百科 3、synchronized的实现原理 它的实现原理主要基于Java 对象头、Monitor监视器以及对象的状态机等概念。当一个线程想要执行同步方法或同步块时它必须先获取该方法或块的锁。如果其他线程已经持有该锁那么当前线程就会进入阻塞状态直到其他线程释放了它所持有的锁。这种机制可以避免多个线程同时访问共享资源从而保证数据的一致性和安全性。 Java 对象头在 Java 对象的内存布局中每个对象都有一个头部信息。对象头是对象实例的一部分。它包含了对象的元数据信息如对象的哈希码、锁状态标志等。在synchronized实现中对象头被用来作为锁的标识。当一个线程执行synchronized方法时它需要获取该方法所在对象的对象头锁。如果其他线程已经持有该锁那么当前线程就会进入阻塞状态直到其他线程释放了它所持有的锁。 图片来源https://www.cnblogs.com/three-fighter/p/14396208.html 在Java中synchronized的实现是通过对象头中的Mark Word来实现的。Mark Word是Java对象头中的一个重要组成部分它包含了对象的哈希码、类型信息、锁状态等信息。当一个线程执行synchronized方法时JVM会通过CASCompare and Swap操作来尝试获取该对象的锁。如果获取成功那么该线程就可以执行synchronized方法如果获取失败那么该线程就会进入阻塞状态。 有关CAS的内容可以查看博客http://t.csdnimg.cn/8QSh6 64 位虚拟机 Mark Word 是 64bit在运行期间Mark Word里存储的数据会随着锁标志位的变化而变化。 图片来源https://www.cnblogs.com/three-fighter/p/14396208.html 32位 图片来源synchronized 看这一篇就够了 - 知乎 Monitor监视器每个 Java 对象都与一个 Monitor 相关联Monitor 是用来实现对象的锁机制的一种数据结构。它包含了锁的拥有者线程、等待队列、计数器等信息。 对象的状态机Java 对象在并发环境下可以处于不同的状态如无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态等。 当执行 synchronized 修饰的方法或代码块时根据对象的状态JVM 会进行如下处理 1. 无锁状态当对象没有被任何线程锁定时进入 synchronized 代码块的线程将会尝试获取对象的锁。 2. 偏向锁状态如果对象的锁处于无锁状态且没有竞争那么进入 synchronized 代码块的线程可以直接获取锁并将对象头中的线程ID更新为自己的ID此时对象处于偏向锁状态。 3. 轻量级锁状态如果对象处于偏向锁状态但出现了竞争JVM 会尝试使用轻量级锁来实现同步。它通过CAS比较并交换操作来尝试获取锁如果获取成功则执行 synchronized 代码块否则进入重量级锁状态。 4. 重量级锁状态当多个线程争用同一个对象的锁时JVM 会将对象的状态升级为重量级锁状态此时线程会被阻塞并加入到对象的等待队列中。只有拥有锁的线程释放锁后等待队列中的线程才能被唤醒。 synchronized 看这一篇就够了 - 知乎 无论是偏向锁、轻量级锁还是重量级锁它们都是通过在对象头中设置标记位和指针来实现的。JVM 会根据对象的竞争情况自动选择适合的锁状态并进行状态的转换。 需要注意的是synchronized 关键字的实现细节可能因不同的 JVM 实现而有所差异上述描述是基于经典的 HotSpot JVM。 ⭐synchronized锁的对比 锁优点缺点使用场景偏向锁加锁和解锁不需要CAS操作没有额外的性能消耗和执行非同步方法相比仅存在纳秒级的差距如果线程间存在锁竞争会带来额外的由于锁撤销的消耗适用于只有一个线程访问同步块的场景轻量级锁竞争的线程不会阻塞提高了响应速度如果线程一直得不到锁竞争的线程使用自旋会消耗CPU性能追求响应时间同步块执行速度非常快重量级锁线程竞争不适用自旋不会消耗CPU线程阻塞响应时间缓慢在多线程下频繁的获取释放锁带来的性能消耗很大追求吞吐量同步块执行速度较长 4、synchronized的优缺点 优点 1. 简单易用synchronized 关键字的语法简单易于理解和使用可以方便地确保多个线程对共享资源的安全访问。 2. 内置支持作为Java语言的一部分synchronized 关键字得到了JVM层面的支持避免了用户自行实现线程同步机制的复杂性。 3. 可重入性synchronized锁是可重入的一个线程可以多次获得同一个锁而不会造成死锁。 缺点 1. 粒度粗使用 synchronized 关键字进行同步时通常是对整个方法或代码块进行同步这可能会导致一些不必要的等待降低并发性能。 2. 无法中断一旦进入 synchronized 代码块除非获取到锁否则无法被中断这可能会导致线程挂起的时间过长。 3. 性能开销在某些情况下使用 synchronized 可能会引入一定的性能开销特别在高并发的场景下这种开销可能会更加显著。 4. 局限性synchronized 的锁是基于对象的因此如果需要对不同的资源进行管理就需要创建不同的对象锁这可能会增加复杂性。 总的来说synchronized 是一种简单且有效的线程同步机制但在一些特定的情况下可能存在一些性能和灵活性上的局限性。在实际开发中可以根据具体情况选择合适的同步机制例如 ReentrantLock、ReadWriteLock 等来弥补 synchronized 的不足。 ⭐扩展synchronized 和 volatile 的区别 synchronized 和 volatile 都是 Java 中用于保证多线程程序正确性的关键字虽然它们的作用有所不同但可以作为互补。 synchronized 关键字用于实现原子性操作和互斥访问。使用 synchronized 修饰的代码块或方法在同一时间只允许一个线程进入临界区其他线程需要等待当前线程执行完毕后才能进入。因此synchronized 能够保证多个线程对共享资源的安全访问并防止数据竞争和不一致性。 volatile 关键字用于保证可见性和禁止指令重排序。使用 volatile 修饰的变量在多个线程之间保持可见性当一个线程修改了变量的值其他线程能够立即看到最新的值。此外volatile 还能够禁止编译器和处理器对代码的优化确保指令按照程序的顺序执行避免出现意外的结果。 需要注意的是volatile 不能保证原子性如果需要进行复合操作例如自增、自减、比较并交换等仍然需要使用 synchronized 或 Lock 等机制来确保原子性。   ⭐扩展synchronized与Lock的区别 图片来源详解synchronized与Lock的区别与使用_synchronized 与lock 和redissionclient分布式锁区别-CSDN博客 小结 注意在 JDK1.5之前synchronized是一个重量级锁相对于juc包中的Locksynchronized显得比较“重量级”。但是在 Java 6 之后 Java 官⽅对从 JVM 层⾯对synchronized进行了优化例如“偏向锁”、“轻量锁”等等并作为Java并发场景下实现多线程安全的一种比较直接的操作。 参考 synchronizedJava语言的关键字_百度百科 https://www.cnblogs.com/three-fighter/p/14396208.html 你真的了解 Synchronized 吗 - 知乎 synchronized 看这一篇就够了 - 知乎 详解synchronized与Lock的区别与使用_synchronized 与lock 和redissionclient分布式锁区别-CSDN博客https://www.cnblogs.com/aspirant/p/11470858.html   万字干货|Synchronized关键字详解 - 知乎 深入Synchronized各种使用方法 - 一无是处的研究僧 - 博客园 感谢阅读码字不易多谢点赞如有不当之处欢迎反馈指出感谢
http://www.huolong8.cn/news/247438/

相关文章:

  • 网站后台编辑教程国外html响应式网站
  • 大连新图闻网站设计网站开发有什么职位
  • 百度营稍福州seo经理招聘
  • 网站创建桌面快捷方式空间设计专业
  • 长沙做网站工作室上海市做网站
  • 怎么修改网站标题关键词描述房地产类的网站建设
  • .net 网站关键字网页和网站有什么区别
  • 小说网站建设的支柱常州网站设计公司
  • 唐山滦县网站建设东莞建设银行网点查询
  • asp.net 做网站源代码已经收录大规模修改收录页面对网站有影响吗
  • 个体户能否从事网站建设东莞英文网站制作
  • 如何建立个人网站的步骤平面广告设计培训班费用
  • 成都哪个网站建设比较好上海老闵行网站建设
  • 深圳网站设计营销型免费网站模板 怎么用
  • 陕西有限公司网站建设招标公告装修设计平台有哪些
  • 建设企业网站的哪家好手机免费建立网站
  • 网站建设外包需要注意哪些wordpress 关联文章
  • 珠海哪里学网站开发销售网站制作怎么做
  • 整站优化外包服务学校二级网站建设自查情况
  • 杭州网站建设公司推广网站优化怎么做
  • 网站开发的阶段网页图
  • 版面设计网站有哪些中亿丰建设集团股份有限公司官方网站
  • 明星个人flash网站源码中视频自媒体平台注册官网
  • 电商网站开发 上海枣强县住房和城乡建设局网站
  • 长春网站建设方案海口 网站建设
  • 阿里云oss做视频网站wordpress模板修改内容
  • 吉林省建设厅官方网站办事指南app开发网上app开发
  • 网站建设seo优化内蒙搜索引擎关键词广告
  • 网站开发毕业生报告建站之星演示
  • 2013一汽大众企业网站车主俱乐部建设维护方案企业模板网站vue