synchronized 用法总结

Delphi中多线程同步过程Synchronize的一些说明 在windows原生应用程序开发中,经常伴随多线程的使用,多线程开发很简单,难点就是在于线程的同步,在Delphi中提供了VC中不具备的一个过程Synchronize,使用起来非常方便,解决了很多VC开发中碰到的常见问题,但是在看了很多Delphi代码后,发现很多人对于Synchronize的理解还是有问题的,不能很好地正确使用Synchronize过程,本文对Synchronize过程的使用提出 阅读详情

synchronized用到不同地方对代码产生的影响:
1. synchronized关键字修饰方法
假设P1、P2是同一个类的不同对象,这个类中定义了以下几种情况的同步块或同步方法,P1、P2就都能够调用他们。
public synchronized void method(){
    //  
}
这也就是同步方法,那这时synchronized锁定的是调用这个同步方法对象。也就是说,当一个对象P1在不同的线程中执行这个同步方法时,他们之间会形成互斥,达到同步的效果。同时如果该对象中有多个同步方法,则当一个线程获执行对象中的一个synchronized方法,则该对象中其它同步方法也不允许别的线程执行。但是这个对象所属的Class所产生的另一对象P2却能够任意调用这个被加了synchronized关键字的方法。
上边的示例代码等同于如下代码:
public void method()   {   
    synchronized (this)      
    {   
       //..   
    }   
}   
此次就是一个P1对象的对象锁,哪个拿到了P1对象锁的线程,才能够调用P1的同步方法,而对P2而言,P1这个锁和他毫不相干,程式也可能在这种情形下摆脱同步机制的控制,造成数据混乱。
2.同步块,示例代码如下:
public void method(SomeObject so) {   
   synchronized(so)   
   {   
        //..   
   }   
}  
这时,锁就是so这个对象,每个对象对应一个唯一的锁,所以哪个线程拿到这个对象锁谁就能够运行他所控制的那段代码。当有一个明确的对象作为锁时,就能够这样写程式,但当没有明确的对象作为锁,只是想让一段代码同步时,能够创建一个特别的instance变量(他得是个对象)来充当锁:
  private byte[] lock = new byte[0]; 

    Public void method(){   
           synchronized(lock) 
           { 
               // 
           }
    }   
PS:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。
3.将synchronized作用于static 函数,示例代码如下:
Class Foo   
{   
    public synchronized static void method1()   

    {   
        //.   
    }   
    public void method2()   
    {   
        synchronized(Foo.class)   
        //
    }   
}  
这两个同步方法都调用这个方法的对象所属的类的类锁(Class,而不再是由这个Class产生的某个具体对象了)。
能够推断:假如一个类中定义了一个synchronized的static函数A,也定义了一个synchronized 的instance函数B,那么这个类的同一对象Obj在多线程中分别访问A和B两个方法时,不会构成同步,因为他们的锁都不相同。A方法的锁是Obj所属的那个Class,而B的锁是Obj所属的这个对象。

synchronized用法详解 目录1.线程安全问题2.使用同步机制管理共享数据3.synchronized原理概述3.1 同步代码块的实现原理3.2 同步方法的原理4.synchronized的使用4.1同步代码块 4.2同步普通方法4.3同步静态方法5.synchronized的不可中断性与可重入性5.1 不可中断性5.2 可重入性6.使用synchronized的注意事项6.1注意synchronized同步块的粒度 6.2 对 String 加锁 6.3 对Integer、Long、Short等包装类加锁 线程允许程 阅读详情

相关推荐

delphi vcl线程同步synchronize

delphi vcl线程同步synchronize

JAVA多线程(八)——Callable,FutureTask以及CompletableFuture简介

个人学习笔记之——FutureCallaleFutureTask简介get方法awaitDone方法cancel方法run方法FutureTask使用样例CompletableFuture简介 Callale 对于Callable大家应该都很熟悉,它与Runnable属于线程的顶级接口,不过它与Runnale不同的是,它支持线程返回执行结果,下面是它的使用方法: package com.example.demo.thread; import java.util.concurrent.*; /** *

孙志南的博客 898

本地化部署dify,使用Database插件实现dify直连数据库报错No module named ‘MySQLdb‘解决方案

网上查阅各种资料,有说修改/dify-main/docker/volumes/sandbox/dependencies目录下的python-requirements.txt文件,添加了如下两行,试验后无效。,看到有人是其他报错,但是URI配置如下(在mysql后面加了pymysql),尝试后果真成功了。按照系统提示设置完数据库URI后保存出现错误。在工具市场查询Database,点击后进行授权。最后在该插件的项目地址获得灵感。

qiaoxu1989的博客 4333

【delphi】线程终的Synchronize和Queue的区别

我们经常在做程序开发的时候会使用到线程,但是线程如果需要操作UI界面元素,则需要使用到Queue和Synchronize方法,这两个方法都会安全的在主线程中执行任务,但是她们的区别是什么呢?

sensor_WU 博客 892

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

【模型解读】【代码复现】Segment Anything Model(SAM)

Meta AI的一个新的人工智能模型,只需一次点击就能 "分割出 "任何图像中的任何物体! SAM是一个可提示的分割系统,对不熟悉的物体和图像具有zero-shot的概括性,并且不需要额外的训练。

lalula的博客 2万+

Delphi:与VCL同步(Synchronize()、用消息来同步)

看本文时,可以同时参考:Delphi中线程类 TThread实现多线程编程(事件、临界区、Synchronize、WaitFor……) 先说一下RTL和VCL   RTL(Run-Time library),运行时库,包括System、SysUtils、Math三个单元,提供的函数与语言、编译器、操作系统及进程有关   RTL提供类之间继承于 TObject 和 RTL内部的类   ...

weixin_30512043的博客 737

Excel数字变成了小数点+E+17?这些方法帮你解决!

本文介绍了三种解决Excel中数字变成小数点+E+17问题的方法:通过下拉箭头或右键菜单设置单元格格式为文本、使用TEXT函数将科学计数法转换为文本。这些方法各有优缺点,适用于不同的场景和需求。在实际应用中,我们可以根据具体情况选择合适的方法来解决问题。通过以上方法,我们可以轻松地从繁琐的小数点+E+17问题中解脱出来,更便捷地处理Excel中的数字。希望本文能够帮助到您,让您在使用Excel时更加得心应手!

nntxthml的博客 1246

Java中Synchronized的用法

synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3.修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; 4..

阳光日志 51万+

迅投miniQMT量化交易实战指南:从入门到自动化交易系统构建

迅投miniQMT量化交易实战指南摘要 本文全面介绍迅投miniQMT量化交易系统的开发流程,重点包括: 环境配置:详细说明miniQMT极简模式的安装步骤,包括xtquant库获取、Python版本要求及验证方法 行情数据模块:解析xtdata模块的核心功能,包括: 获取板块分类与股票列表 查询合约基础信息 下载历史K线数据(支持tick、分钟、日线等周期) 交易执行模块:介绍xttrader模块的交易API,涵盖: 账户连接与初始化 订单管理(下单、撤单、查询) 持仓与资产查询 实战开发:提供可直接运行

huanghm88的专栏 666

2021年03月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。现在从m位中删除k位(0

人生就是一个不断学习的过程 1010

Synchronized的几种用法

我们都知道 Synchronized 是线程安全同步用的,大部分程序可能只会用到同步方法上面。其实 Synchronized 可以用到更多的场合,这里列举了以下五个用法。 1、同步普通方法 这个也是我们用得最多的,只要涉及线程安全,上来就给方法来个同步锁。这种方法使用虽然最简单,但是只能作用在单例上面,如果不是单例,同步方法锁将失效。 /** * 用在普通方法 */ privat...

xzh_blog 585

锂电池的充电和放电曲线解读

锂电池充放电曲线是反映其性能的关键指标。充电曲线分为恒流和恒压两阶段:恒流阶段电压快速上升,恒压阶段电流逐渐降低;放电曲线则呈现平台期和快速衰减期特征。这些曲线受温度、充放电倍率及材料体系(如三元锂或磷酸铁锂)显著影响。通过分析曲线特征,可优化电池管理系统,实现精准的SOC估算、快充策略制定及故障诊断,从而在电池性能与安全性间取得平衡。不同应用场景(如新能源汽车或消费电子)对曲线形态有特定要求。

start_up_go的博客 5066

Synchronized用法及原理

本文就围绕Synchronized展开,主要介绍Synchronized的用法、Synchronized的原理。 Synchronized用法 Synchronized是Java提供的一个同步控制的关键字。主要有两种用法,分别是:同步代码块和同步方法。也就是说,Synchronized既可以修饰方法,也可以修饰代码块。被Synchronized修饰的方法或代码块,同一时间只能被单个线程访问。 Synchronized的实现原理 Synchronized,是Java中用于解决并发情况下数据同步的一个很

qinshuluye2013的专栏 686

线程池详解(通俗易懂超级好)

目标 【理解】线程池基本概念 【理解】线程池工作原理 【掌握】自定义线程池 【应用】java内置线程池 【应用】使用java内置线程池完成综合案例 线程池 线程池基础 线程池使用 线程池综合案例 4.学员练习 5.线程池总结 概念介绍 1:什么是线程池 2:为什么使用线程池 3:线程池有哪些优势 什么是池 什么是线程池 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runna.

拉格朗日的学习笔记 12万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Synchronized的用法

Java中Synchronized的用法(简单介绍) </h1> <div class="clear"></div> <div class="postBody"> 简单介绍 synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:    1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;&

菜鸟教程 2007

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

synchronized的四种用法

Synchronized修饰一个方法很简单,就是在方法的前面加synchronized,synchronized修饰方法和修饰一个代码块类似,只是作用范围不一样,修饰代码块是大括号括起来的范围,而修饰方法范围是整个函数。例如:方法一// todo方法二// todo写法一修饰的是一个方法,写法二修饰的是一个代码块,但写法一与写法二是等价的,都是锁定了整个方法时的内容。synchronized关键字不能继承。

Java后端技术栈 2121

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Synchronized 的用法

Synchronized 的用法synchronized 是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步代码块,作用范围是{}里面的代码,作用的兑现是调用这个代码块的对象; 修饰一个方法,被修饰的方法被称为同步方法,作用范围是整个方法,作用的兑现是调用这个方法的对象; 修饰一个静态方法,作用范围是整个静态方法,作用的对象是这个类的所有对象; 修饰一个类,作用范围是 s

陆羽_ 的简单生活 366

synchronized的用法

synchronized 是 Java 中用于实现线程同步的关键字,确保多个线程对共享资源的互斥访问。其主要用法包括: Synchronized 方法:修饰方法时,线程获取对象锁,其他线程需等待锁释放。 Synchronized 代码块:通过指定锁对象,精确控制同步范围,提升灵活性。 静态 Synchronized 方法:获取类锁,即使多个实例访问也互斥。 锁的可重入性:同一线程可多次获取同一锁,避免死锁。 锁的粒度:锁的粒度越小,性能越好,减少线程竞争。 通过合理使用 synchronized,可以有效解

IT枫斗者的博客 898

synchronized用法(一):synchronized的使用

synchronized的用法 三种用法: 修饰实例方法 修饰静态方法 修饰代码块 synchronized的作用: 原子性:synchronized保证语句块内操作是原子的 可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现) 有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”) 一、3种用法 synchronized是Java中的关键字,是一种同步锁。 修饰一个类:其作用的范围是s

qq_45424937的博客 975

synchronized有几种用法?

在 Java 语言中,保证线程安全性的主要手段是加锁,而 Java 中的锁主要有两种:synchronized 和 Lock,我们今天重点来看一下 synchronized 的几种用法。 用法简介 使用 synchronized 无需手动执行加锁和释放锁的操作,我们只需要声明 synchronized 关键字就可以了,JVM 层面会帮我们自动的进行加锁和释放锁的操作。 synchronized 可用于修饰普通方法、静态方法和代码块,接下来我们分别来看。 1、修饰普通方法 synchronized

q66562636的博客 3932

Synchronized 有几种用法

我们都知道 Synchronized 是线程安全同步用的,大部分程序可能只会用到同步方法上面。其实 Synchronized 可以用到更多的场合,栈长列举了以下几个用法。 1、同步普通方法 这个也是我们用得最多的,只要涉及线程安全,上来就给方法来个同步锁。这种方法使用虽然最简单,但是只能作用在单例上面,如果不是单例,同步方法锁将失效。 /** *用在普通方法 */ priva...

weixin_30820151的博客 94

synchronized几种常见用法

我们都知道 Synchronized 是线程安全同步用的,大部分程序可能只会用到同步方法上面。其实 Synchronized 可以用到更多的场合,栈长列举了以下几个用法。 1、同步普通方法 这个也是我们用得最多的,只要涉及线程安全,上来就给方法来个同步锁。这种方法使用虽然最简单,但是只能作用在单例上面,如果不是单例,同步方法锁将失效。 /** * 用在普通方法 */ private synchronized void synchronizedMethod() { System.out.p

只为成功找方法 不为失败找借口 362

synchronized用法

Java 中 synchronized的用法详解(四种用法) 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-11-09 我要评论 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧 Java语言的关键字,当它用来

iloveyangyi的博客 293

synchronized的各种用法及注意事项

本文主要通过简单的demo来阐述锁的各种用法以及使用锁的相关注意事项,记录下来同时也方便自己记忆。锁是jvm内置的锁,不同于锁。关键字可以修饰方法,也可以修饰代码块。关键字修饰方法时可以修饰静态方法,也可以修饰非静态方法;同样,关键字修饰代码块时可以修饰对象,也可以修饰类。当然,修饰静态方法/类和非静态方法/对象时的作用范围是不同的。下面通过各种demo来详解的各种用法及注意事项。

程序员高级码农的博客 1084
上一篇: 用webmagic实现的网络爬虫
下一篇: JAVA正则表达式的字符串查找操作
MarkArch
博客等级 码龄12年 35粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值