首页 > 其他分享 >synchronized关键字

synchronized关键字

时间:2023-09-04 11:55:05浏览次数:36  
标签:synchronized 括号 void here 关键字 线程 public

synchronized

方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前。一次只能有一个线程进入该方法,其他线程想要调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入。

public synchronized void func(){
  // TODO
}

对某一代码块使用,synchronized后跟括号,括号里是变量,这样,一次只有一个线程进入该代码块。

public void func(){
  synchronized(a1) {
    //一次只能有一个线程进入
  }
}

synchronized后面括号里是一对象,此时,线程获得的是对象锁。但直接对变量上锁是非常粗糙的行为,最好使用虚拟锁替代。

MyMemberClass x, y;
Object xlock = new Object(), ylock = new Object();

public void foo() {
  synchronized(xlock) {
    //access x here
  }
  //do something here - but don't use shared resources
  synchronized(ylock) {
    //access y here
  }
}

public void bar() {
  synchronized(this) {
    //access both x and y here
  }
  //do something here - but don't use shared resources
}

synchronized后面括号的对象为类,此时加锁的为此类,其他线程所有对类进行的操作皆不可行,包括静态变量和静态方法。

synchronized(ArrayWithLockOrder.class) {
  //TODO
}

标签:synchronized,括号,void,here,关键字,线程,public
From: https://www.cnblogs.com/liu-im/p/17676545.html

相关文章

  • 关键字
    关键词as用于类型转换。为导入指定一个别名break中止当前循环,switch语句,并把程序控制流转到紧接着被中止语句后面的语句。case与 switch 搭配使用。catch与 try 搭配使用,捕获程序异常。class声明创建一个新类。const声明一个常量,不能重新赋值。......
  • c++11关键字
    decltype关键字:查询关键字的数据类型#语法:decltype(expression)var;1)如果expression是没有用括号括起来的标识符(不包括decltype本身的括号,则var的类型与该标识符的类型相同,包括const等限定符,注意如果返回值为引用时需要先初始化2)如果expression是函数调用,则var的类型与......
  • C/C++ const关键字 解读
    Thecollocationbetweenconstandoriginalpointerisconfusedtomanypeople.Therearetwousagesofit.Thefirstoneisavariablepointerthatpointsaconstantdata.i.e.constint*p#include<iostream>intmain(){ inta=1,b=2; const......
  • 使用synchronized关键字来同步多个线程操作同一个文件
    使用synchronized关键字来同步多个线程操作同一个文件importjava.io.FileWriter;importjava.io.IOException;publicclassFileSyncExample{privatestaticObjectfile=newObject();publicstaticvoidmain(String[]args)throwsInterruptedException{......
  • static关键字,帮助文档,代码块
    1,static关键字-可以修饰成员变量和成员方法,代码块-特点:被类的所有对象共享也是我们判断要不要用static修饰的标准随着类的加载而加载优先于对象存在的可以通过类名调用本身也可以通过对象名调用-静态内容也称为:类成员packagecom.momo.demo;/*创建了多个对象,不同的人姓名年龄不一样......
  • 【校招VIP】java语言考点之关键字static
    考点介绍:static考点是面试的高频考点,一般从容易到难提问,比如从static的含义和理解、到JVM的存储或者到线程安全性,再到单例模式等。答案详情解析和文章内容可扫下方海报二维码或点击链接即可查看!一、考点题目1、在java中,类Cat里面有个公有方法sleep(),该方法前有static修饰,则可......
  • 京东API接口解析,实现按关键字搜索商品
    京东开放平台提供了丰富的API接口,用于查询商品、用户、订单等信息。以下是一个基本的示例,解析并实现按关键字搜索商品的API接口。需要访问京东开放平台并注册一个开发者账号。注册完成后,你需要创建一个应用并获取到API的权限。在获取到API权限后,你可以在开发者的控制台中找到API的......
  • Java并发编程:volatile关键字解析
    Java并发编程:volatile关键字解析volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是......
  • 软件测试|Python中的变量与关键字详解
    简介在Python编程中,变量和关键字是非常重要的概念。它们是构建和控制程序的基本要素。本文将深入介绍Python中的变量和关键字,包括它们的定义、使用方法以及一些常见注意事项。变量变量的定义变量是用于存储数据值的名称。在Python中,变量无需声明,可以直接赋值使用。变量可以存储不同......
  • 关于Python的学习记录(二十五_yield 关键字和生成器)
    Python中,生成器(Generator)是一种特殊的迭代器,它可以通过函数来创建。生成器函数使用 yield 关键字来产生一个值,并且在每次调用 yield 时暂停执行,保留函数的状态,以便下次调用时可以从上次暂停的地方继续执行。生成器具有以下特点:生成器函数使用def关键字定义,但是它们的执行方......