返回顶部
首页 > 资讯 > 精选 >Java对象级别与类级别的同步锁synchronized语法怎么用
  • 399
分享到

Java对象级别与类级别的同步锁synchronized语法怎么用

2023-06-29 12:06:23 399人浏览 泡泡鱼
摘要

本篇内容主要讲解“Java对象级别与类级别的同步锁synchronized语法怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java对象级别与类级别的同步锁synchronized语法怎么

本篇内容主要讲解“Java对象级别与类级别的同步synchronized语法怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java对象级别与类级别的同步锁synchronized语法怎么用”吧!

Java synchronized 关键字 可以将一个代码块或一个方法标记为同步代码块。同步代码块是指同一时间只能有一个线程执行的代码,并且执行该代码的线程持有同步锁。synchronized关键字可以作用于

  • 一个代码块

  • 一种方法

当一个方法或代码块被声明为synchronized时,如果一个线程正在执行该synchronized 方法或代码块,其他线程会被阻塞,直到持有同步锁的线程释放。根据锁定的范围可以分为

  • 类级别的锁可以防止多个线程在运行时同时进入该类所有实例化对象的 synchronized代码块中。

  • 对象级别的锁可以防止多个线程在运行时同时进入当前(或某一个)实例化对象的 synchronized代码块中。

1. 对象级别的同步锁

对象级别的同步锁:当我们想要在多线程环境下同步执行一个非静态方法或非静态代码块时,在类的方法或代码块加上synchronized关键字,可以保证对象实例级别数据的线程安全。(比较后文的类级别的同步锁,回头来理解这句话)

对象级别的加锁的代码如下,如:在方法上加锁,锁对象为当前类的实例化对象

public class DemoClass{public synchronized void demoMethod(){}}

如:为代码块加锁,锁对象为this对象

public class DemoClass{public void demoMethod(){synchronized (this){//同步代码块}}}

如:为代码块加锁,锁对象为我们创建的任意一个对象。不要使用非final的成员变量作为同步锁对象,因为非final成员变量可以被重新赋值,导致不同的线程使用不同的对象作为锁,达不到同步锁定的效果。

public class DemoClass{    //注意这里的关键字final非常重要,看说明private final Object lock = new Object();public void demoMethod(){synchronized (lock){//同步代码块}}}

2. 类级别的同步锁

类级别的锁可以防止多个线程在运行时进入该类所有实例化对象的 "synchronized块中。也就是说如果运行时有100个DemoClass的实例,那么每次只有一个线程能够在任何一个实例中执行demoMethod(),所有其他实例的所有其他线程都被锁定。

为了保障静态数据线程安全,应该使用类级别的锁定。我们知道static关键字将方法的数据关联到类的级别上,所以在静态方法上使用锁。

静态方法加锁,对该类所有的实例化对象生效

public class DemoClass{//静态方法加锁,对该类所有的实例化对象生效public synchronized static void demoMethod(){}}

获取 .class类的引用,类级别的锁

public class DemoClass{public void demoMethod(){//获取 .class类的引用,类级别的锁,对该类所有的实例化对象生效synchronized (DemoClass.class){//同步代码块}}}

使用静态对象的锁,类级别的锁

public class DemoClass{    //静态对象,类级别,注意这里的关键字final非常重要private final static Object lock = new Object();public void demoMethod(){//使用静态对象的锁,类级别锁,对该类所有的实例化对象生效synchronized (lock){//同步代码块}}}

到此,相信大家对“Java对象级别与类级别的同步锁synchronized语法怎么用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Java对象级别与类级别的同步锁synchronized语法怎么用

本文链接: https://lsjlt.com/news/324804.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java对象级别与类级别的同步锁synchronized语法怎么用
    本篇内容主要讲解“Java对象级别与类级别的同步锁synchronized语法怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java对象级别与类级别的同步锁synchronized语法怎么...
    99+
    2023-06-29
  • Java对象级别与类级别的同步锁synchronized语法示例
    目录1. 对象级别的同步锁2. 类级别的同步锁3. 总结 Java synchronized 关键字 可以将一个代码块或一个方法标记为同步代码块。同步代码块是指同一时间只能有一个线程...
    99+
    2024-04-02
  • java中类方法与对象方法的区别
    类方法和对象方法的区别如下:对象方法必须用对象调用,类方法必须用类来调用对象方法中可以直接访问属性(成员变量),类方法中不可以直接访问属性(成员变量)类方法和对象方法可以进行相互调用1对象方法中可以直接调用类方法2类方法中间接调用对象方法 ...
    99+
    2021-04-22
    java入门 java 类方法 对象方法 区别
  • Java不同版本接口语法和抽象类与接口的区别是什么
    本文小编为大家详细介绍“Java不同版本接口语法和抽象类与接口的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java不同版本接口语法和抽象类与接口的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-29
  • GO语言和Javascript中的对象同步:有什么区别和联系?
    随着计算机科学的发展,越来越多的编程语言被开发出来。其中,GO语言和Javascript都是非常流行的编程语言。在这两种语言中,对象同步是一个非常重要的话题。在本文中,我们将讨论GO语言和Javascript中的对象同步,比较它们之间的区别...
    99+
    2023-09-15
    对象 同步 javascript
  • 使用Python怎么实现SQL Server数据库的对象同步轻量级
    这期内容当中小编将会给大家带来有关使用Python怎么实现SQL Server数据库的对象同步轻量级,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1,表的存在依赖于sch...
    99+
    2024-04-02
  • Java详细讲解不同版本的接口语法和抽象类与接口的区别
    目录什么是接口?接口的语法: (JDK7.0)接口的语法: (JDK8.0)接口的语法: (JDK9.0)—(私有方法)接口的分类常量接口:空接口:函数式接口:什么是接口...
    99+
    2024-04-02
  • 自然语言处理中的同步对象:Java开发者应该怎样加以利用?
    自然语言处理是人工智能领域中的一个重要分支,它可以帮助我们更好地理解和处理人类语言。在自然语言处理中,同步对象是一个非常重要的概念,它可以帮助我们更好地管理和处理文本数据。在本文中,我们将介绍自然语言处理中的同步对象,并探讨Java开发者如...
    99+
    2023-08-14
    同步 自然语言处理 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作