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

synchronized 关键字

时间:2023-06-03 11:57:44浏览次数:40  
标签:synchronized 对象 微信 关键字 线程 修饰

1. synchronized 关键字的作用

synchronized 关键字解决的是多个线程之间访问资源的同步性,用于保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。

2. 作用范围

  • 修饰代码块:大括号括起来的代码,作用于调用的对象。
  • 修饰方法:整个方法,作用于调用的对象。
  • 修饰静态方法:整个静态方法,作用于所有对象。
  • 修饰类:括号括起来的部分,作用于所有对象。

其中前两种使用的锁称为对象锁,后两种称为类锁。

3. synchronized 关键字的性质

  • 可重入:避免死锁、提升封装性
  • 不可中断:一旦这个锁已经被别人获得了,如果我还想获得,就只能选择等待或者阻塞,知道别的线程释放这个锁。如果别人永远不释放这个锁,那么我只能永远等待下去。

4. synchronized 关键字的缺陷

  • 效率低

    只能等执行完锁定代码块或者遇到异常才能退出
    试图获得锁时不能设定超时时间
    不能中断一个正在试图获得锁的线程

  • 不够灵活

    加锁和释放锁的时机单一
    每个锁仅有单一的条件(某个对象)

  • 无法知道是否成功获取到锁

5. 原子性-对比

  • synchronize:不可中断,适合竞争不激烈的场景,可读性好
  • lock:可中断,多样化同步,竞争激烈时能维持常态
  • Atomic:竞争激烈时能维持常态,比lock性能好,只能同步一个值

文章来源:synchronized 关键字

个人微信:CaiBaoDeCai

微信公众号名称:Java知者

微信公众号 ID: JavaZhiZhe

谢谢关注!

标签:synchronized,对象,微信,关键字,线程,修饰
From: https://www.cnblogs.com/javazhizhe/p/17453747.html

相关文章

  • python 仅关键字参数
    defstandard_arg(arg)defstandard_arg(arg):print(arg)standard_arg(2)standard_arg(arg=2)对参数没有限制defstandard_arg(arg,/)defstandard_arg(arg,/):print(arg)standard_arg(2)#正确standard_arg(arg=2)#报错仅限位置参数def stand......
  • 【电商api接口系列分享】按关键字搜索商品演示示例
     在电商平台中,关键词推荐是提高用户购物体验和销售业绩的一个重要手段。它的重要性体现在以下几个方面:提升购物体验:通过关键词推荐,电商平台可以根据用户的搜索意图和行为来向其推荐相关的商品。这样可以帮助用户更快地找到自己需要的商品,提高购物体验和满意度。增加销售......
  • C# 一些非常用关键字
    一、fixed 1、fixed语句禁止垃圾回收器重定位可移动的变量。fixed语句只能出现在不安全的上下文中。Fixed还可用于创建固定大小的缓冲区。2、fixed语句设置指向托管变量的指针并在statement执行期间“钉住”该变量。如果没有fixed语句,则指向可移动托管变量的指针的作用......
  • Day07-static关键字
    static关键字static修饰变量可直接被类名调用可被对象调用没有加static关键字时,无法直接被类名调用publicclassDemo01{  privatestaticintage;//静态的变量多线程!  privatedoublescore; //非静态的变量​  publicstaticvoidmain(String[]......
  • [C++学习]关键字
    const关键字const关键字表示该数据类型的值只读,不可赋值,也就意味着它必须初始化。const若是修饰常量,则只读变量的值会放在“符号常量表”中,而不会立即开辟空间,当数据取地址时则会开辟空间。constintdata=100;int*p=(int*)&data;//开辟空间,p指向该空间。*p=200......
  • SQL注入绕过——主要是magic_quotes_gpc, is_int(只能跑路,无注入点),以及关键字绕过,WAF绕
       SQL注入点是可以在get、post、cookie、request、http头里等 ......
  • 【掌握接口开发技巧 打造可靠的API接口】按关键字搜索商品
    作为一名程序员,在开发过程中经常需要开发API接口来实现数据的传输和交互等功能。本文将介绍程序员如何开发API接口,并提供一些实用的技巧。第一步:设计接口文档在开发API之前,我们需要先设计接口文档。接口文档包括接口名称,参数名称和类型,返回值格式等信息。接口文档可以帮助我们更好......
  • vscode设置关键字高亮
    下载highlight-words插件在settings.json文件中添加以下代码路径:(文件>首选项>设置>打开设置(json)图标在右上角)"highlightwords.colors":[{"light":"#b3d9ff","dark":"cyan"},{"light":"#e6ffb3&......
  • C#引用类型带ref关键字的用处
    1.在C#中有两个大的数据类型,值类型和引用类型。1)任何的结构体(例如:structInt32...)或者是枚举都是值类型。2)能被称作"类"的,则为引用类型,比如你用如下关键字(class、interface、delegate、record),或者是使用C#内置的引用类型:dynamic、object、string。引用类型和值类型。引用类......
  • let 和 const 是 JavaScript 中用于声明变量的关键字
    let和const是JavaScript中用于声明变量的关键字。let关键字用于声明可变(可重新赋值)的变量。通过使用let关键字声明的变量可以在其作用域内被重新赋值。例如:letx=10;x=20;//可以重新赋值const关键字用于声明不可变(不可重新赋值)的常量。通过使用con......