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

Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题

Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling

weixin_43644424的博客 1万+

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

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

sensor_WU 博客 892

电商平台大数据分析指标

一、五大关键数据分析指标 1.1活跃用户量 活跃用户量是一个基本的指标,有 DAU(日活跃用户)、WAU(周活跃用户)和 MAU(月活跃用户)三个层次; 1.2转化 转化是一个非常重要的指标,电商运营需要关注主路径、次路径甚至精细到每一个品类 / SKU 的转化率; 1.3留存 留存要从不同的时间周期上研究,包括次日留存率、3 日、7 日、30 日留存; 1.4复购 复购则要从 3 个角度去看,复购用户量、复购率和复购金额比; 1.5GMV GMV 是最重要的指标,我们的运营最终是围绕这

默主归沙的博客 4818

`全网最细!! 入门必看Git教程链接:https://gitee.com/all-about-git`

全网 Git 入门教程 gitee.com。如果显示The requested URL returned error: 403错误,那就表示没有和window本地建立token令牌

qq_37855368的博客 3748

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

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

weixin_30512043的博客 737

灰度重心法实战:从原理到MATLAB代码实现激光条纹中心线提取

本文详细介绍了激光条纹中心线提取的核心方法——灰度重心法。通过物理类比阐释其原理,并提供从图像预处理到MATLAB代码实现的完整实战教程。文章重点解析了算法流程、关键参数调整及常见问题避坑指南,帮助读者快速掌握这一机器视觉与三维测量中的基础且高效的技术。

cake8的博客 461

Java中Synchronized的用法

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

阳光日志 51万+

YOLO系列算法改进 | Head改进篇 | 融合Detect_LSCD轻量共享卷积检测头 | 轻量化设计破解计算瓶颈,增强复杂场景目标感知能力

YOLO系列算法改进 | Head改进篇 | 融合Detect_LSCD轻量共享卷积检测头 | 轻量化设计破解计算瓶颈,增强复杂场景目标感知能力 (以YOLO26最新目标检测模型为基础,融合Detect_LSCD检测头进行改进)

2502_91881744的博客 704

《派出你的AI同事:WorkBuddy案例实战》067:按行业分类的案例索引

按行业分类的案例索引 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 99

Synchronized的几种用法

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

xzh_blog 585

使用Google Earth Engine下载JRC全球水体数据

通过Google Earth Engine平台和提供的源代码,研究人员和水资源管理者可以方便地获取和利用这一重要的水资源监测数据集,从而开展相关的研究和决策支持工作。要使用Google Earth Engine下载JRC全球水体数据,首先需要在Google Earth Engine平台上进行注册和登录。JRC全球水体数据是由欧洲联合研究中心开发的高分辨率全球水体分类数据集,覆盖了整个地球的陆地和水域。下载完成后,你可以使用各种遥感数据处理软件来打开和分析这些数据,以满足不同的研究和应用需求。

LrlDebug的博客 1158

Synchronized用法及原理

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

qinshuluye2013的专栏 686

【AI智能体】Dify 搭建数据分析应用实战操作详解

Dify 搭建数据分析应用实战详解

congge 7295

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Synchronized的用法

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

菜鸟教程 2007

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

synchronized的四种用法

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

Java后端技术栈 2121

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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、付费专栏及课程。

余额充值