静态同步函数

Win11 WSL2 Ubuntu 18.04 ROS Gazebo 图形渲染性能调优:从LLVM到NVIDIA GPU的完整指南 本文详细解决了在Win11 WSL2 Ubuntu 18.04环境中运行ROS Gazebo时图形渲染卡顿的问题。通过诊断默认LLVM软件渲染的瓶颈,指导用户更新Mesa驱动PPA源,并关键性地设置环境变量以强制启用NVIDIA GPU硬件加速,最终显著提升仿真性能与流畅度。 阅读详情

静态同步函数

什么是静态同步函数?

方法上加上static关键字,使用synchronized 关键字修饰 或者使用类.class文件。

静态的同步函数使用的锁是  该函数所属字节码文件对象

可以用 getClass方法获取,也可以用当前  类名.class 表示。

public static void sale() { //前面有static修饰了  静态的不需要被实例化 不可以用this
        synchronized (ThreadTrain3.class) {  //当前类的clas
            if (trainCount > 0) {
                System.out.println(Thread.currentThread().getName() + ",出售第" + (100 - trainCount + 1) + "张票");
                trainCount--;
            }
        }
}

总结:

synchronized 修饰方法使用锁是当前this锁。

synchronized 修饰静态方法使用锁是当前类的字节码文件

 

可以证明:(两个线程在执行 拿到的锁不一样)

package com.toov5.threadSecurity;
class Thread009 implements Runnable {
    private static int trainCount = 1000;
    private Object oj = new Object();
    public static boolean flag = true;

    public void run() {

        if (flag) {
            while (trainCount>0) {
                synchronized (this) {
                    try {
                        Thread.sleep(10);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    if (trainCount > 0) {
                        System.out.println("true");
                        System.out.println(Thread.currentThread().getName() + "," + "出售第" + (100 - trainCount + 1) + "票"+flag);
                        trainCount--;
                    }    
                }
    
            }
        } else {
            while (trainCount > 0) {
                synchronized (this) {
                   System.out.println("fasle");
                    sale();
                }
                }

            }
        }


    public static synchronized void sale() {

        try {
            Thread.sleep(10);
        } catch (Exception e) {
            // TODO: handle exception
        }
        if (trainCount > 0) {
            System.out.println(Thread.currentThread().getName() + "," + "出售第" + (100 - trainCount + 1) + "票"+flag);
            trainCount--;
        }

    }
}

public class Test009 {
    public static void main(String[] args) throws InterruptedException {
        Thread009 threadTrain = new Thread009();
        Thread t1 = new Thread(threadTrain, "窗口1");
        Thread t2 = new Thread(threadTrain, "窗口2");
        t1.start();
        Thread.sleep(30);
        threadTrain.flag = false;
        t2.start(); //t2线程走下面的那段代码

    }
}

肯定不能同步的

一个用的当前字节码文件 一个用的this 

 

 

句向量(句嵌入)模型sent2vec的训练及应用 本文讨论NLP中的句向量模型(sent2vec),也就是将一个完整的句子映射成一个实数向量的技术。这方面已经发表的成果也是比较多的,本文中所涉及的技术主要源自NAACL 2018的一篇论文,其中提出的sent2vec模型可以理解为词嵌入技术中经典的CBOW方法的扩展,该所谓的扩展中一个重要改进就是引入了n-gram 阅读详情

相关推荐

Cortex-M TrustZone实战:从硬件隔离到安全交互的嵌入式开发指南

在嵌入式系统开发中,硬件安全隔离是构建可信执行环境(TEE)的核心技术。其原理是通过处理器硬件机制,将系统资源划分为安全与非安全域,实现内存、外设和代码的强制访问控制。这项技术的核心价值在于,它能在单一芯片上为资源受限的物联网(IoT)设备、智能传感器等提供芯片级的安全基础,无需依赖外置安全元件,从而降低BOM成本并简化设计。典型的应用场景包括保护设备密钥、实现安全启动、构建安全服务(如加密、密钥管理)以供应用程序调用。本文聚焦于Arm Cortex-M系列微控制器上的TrustZone技术实现,针对开发中

weixin_42639246的博客 300

线程安全问题————(静态)同步函数

同步函数的使用的锁是this;同步函数和同步代码块的区别:同步函数的锁是固定的this。同步代码块的锁是任意的对象。建议使用同步代码块。静态的同步函数使用的锁是  该函数所属字节码文件对象 可以用 getClass方法获取,也可以用当前  类名.class 表示。*/ class Ticket implements Runnable { private int num = 100; // Ob...

酒酒的博客 258

UniApp实现多端支付功能完整实现指南

支付业务流程多端支付实现安全性保障异常处理最佳实践支付基础知识多端支付实现统一支付封装安全性处理异常处理最佳实践根据具体业务场景选择合适的支付方式注重安全性和用户体验做好异常处理和日志记录持续优化和改进支付流程关注我,持续分享前端项目开发经验!

weixin_63454527的博客 2128

多线程(同步代码块和同步函数)

线程安全问题 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完, 另一个线程参与进来执行。导致共享数据的错误。解决办法: 对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。 Java对于多线程的安全问题提供了专业的解决方式。就是同步代码块。synchronized(对象){ 需要被同步的代码}对...

weixin_30954265的博客 142

Kettle下载与安装教程【保姆版】

Kettle简介 Kettle最早是一个开源的ETL工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。后来Kettle重命名为Pentaho Data Integration 。 它由Java开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。 主要功能 Pentaho D

weixin_43407520的博客 12万+

【软路由】旁路由使用配置教程

【软路由】旁路由使用配置教程简介旁路由好处旁路由配置步骤1、修改管理地址网段 简介 我们都知道,软路由一般有两种使用方式,一种是作为承担DHCP分配的主路由,而另一种就是作为不承担DHCP分配功能的旁路由使用。今天就来介绍如何将软路由配置成为旁路由。 旁路由好处 旁路由最大的好处就是它不承担DHCP分配任务,这意味着它的对网络的影响极小。即使突然故障也不会导致整个网络瘫痪。更别提软路由的配置复杂,用户可能还经常修改上面的网络配置,一旦出错就是整个网络瘫痪,如果家中还有其他人使用网络,影响实在是不好。 建议有

博客 4万+

多线程静态同步函数

多线程静态同步函数和非静态同步函数的区别是啥? 静态同步函数:就是方法使用了static关键字修饰 非静态同步函数:没有用static关键字修饰的方法,也就是使用this锁的同步函数 那么静态同步函数使用的啥锁呢? 分析:两个线程,一个线程使用静态同步函数,一个使用同步代码块this锁,如果线程不同步(线程不安全),就说明静态同步函数使用的不是this锁,如果线程同步,就说明使用的是this锁。 ...

qq_35657661的博客 387

飞凌OK3588-C Linux R4系统下MIPI YUV摄像头CSI尺寸错误排查与极性适配方案

本文详细介绍了在飞凌OK3588-C平台的Linux R4系统下调试MIPI YUV摄像头时遇到的'csi size err'错误排查与极性适配方案。通过分析信号极性、驱动参数调整及FPGA协同调试,提供了从硬件检测到系统级调试的完整解决方案,帮助开发者快速解决类似问题。

bean的博客 259

Java中的静态同步方法

在Java中存在静态同步方法,也就是在静态方法上使用synchronized关键字。它的锁是当前类的Class对象,也就是说,每个类只有一个Class对象,在多线程下通过这种方式可以确保同一时间只能有一个线程进入到静态同步方法中执行代码,从而避免并发导致的数据错误和异常。具体来说,当一个线程调用了一个被synchronized修饰的静态同步方法M时,JVM会尝试获取该类的Class对象的锁。如果该锁没有被其他线程持有,则当前线程可以获取该锁并执行M方法中的代码;否则,当前线程会阻塞等待其他线程释放锁。

jakelihua 813

Brim与ZUI协同安装指南:从下载到流量分析实战

本文提供Brim与ZUI协同安装与实战指南,详细讲解从下载、环境变量配置到流量分析的全流程。通过将PCAP文件转换为ZNG格式,结合直观的Zed查询语言,这套组合能极大提升大型网络数据包的分析效率,是网络安全与运维人员进行高效流量分析的利器。

metal的博客 459

C++(Qt)软件调试---Windows下Qt使用dump定位崩溃位置(1)

在C++/Qt程序崩溃时,往往很难找到崩溃的原因,如果是稳定复现的问题还好,但是多数情况遇见的问题是随机出现的,这时想要快速找到问题并解决就需要通过dump文件定位崩溃位置。

mahuifa的博客 1万+

静态同步方法(static synchronizd)

Java语法规定,任何线程进入同步方法、同步代码块之前,必须先获取同步方法、同步代码块对应的同步监视器。 对于同步代码块而言,程序必须为它显示的指定同步监视器(可为this也可以自定义Object类型的全局变量);对于同步非静态方法而言,该方法的同步 监视器是this----即调用该方法的java对象;对于静态的同步方法而言,该方法的同步监视器不是this而是该类本身。

yansong_8686的专栏 3296

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

Java基础之验证静态同步函数锁

/* 静态的同步函数使用的锁是 该函数所属字节码文件对象 可以用 getClass方法获取,也可以用当前 类名.class 表示。 */ class Ticket implements Runnable { private static int num = 100; // Object obj = new Object(); boolean flag = true; public void run() { // System.out.println("this:"+this.getC

独狼的博客 205

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

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java多线程编程——静态同步函数

java多线程编程——静态同步函数 //饿汉式,在多线程下是安全的 public class Single { private static final Single s=new Single(); private Single(){}; public static Single getInstance(){ ...

MineQAQ 142

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java笔记十三 验证静态同步函数的锁

编辑器:Notepad++;学习视频:毕向东Java基础教程 /* 验证静态同步函数的锁: 该函数所属的字节码文件对象, 可以用this.getClass()获取, 也可以用该函数所在的 类名.class获取 */ //第一步:实现Runnable接口 class Ticket1 implements Runnable //不使用继承,避免多个线程卖相同的票(可将num定义...

khq溪风的博客 218

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

同步代码块、同步函数和静态同步函数

同步代码块的锁可以是任意对象Object obj = new Object(); synchronized(obj) { if(num > 0) { try{Thread.sleep(10);} catch(InterruptedException e){}; System.out.println(Thread.currentThread()....

jamie_byr 1659

JAVA 多线程静态同步函数的锁是class 对象

//仅作为学习笔记 /* 通过验证发现 同步函数如果被静态修饰后,不再以this 为锁 静态进内存时,内存中没有本类对象,但是一定有该类的字节码文件对象 类名.class 该对象的类型是class 静态的同步方法,使用的锁是该方法所在类的字节码文件对象。类名.class */ class Ticket implements Runnable { private sta

wu_lai_314的专栏 5830

同步代码块,同步函数,静态同步函数的锁对象

同步代码块: 可以自己任意指定同步锁对象 同步函数: 同步函数的锁对象是固定的this对象 静态同步函数: 静态同步函数的锁对象是该函数所属的类的字节码文件对象 以上可以自己通过代码验证。

张超的博客 1309

多线程--验证静态同步函数的锁是该函数所属字节码文件对象

/* 静态的同步函数使用的锁是 该函数所属字节码文件对象 可以用 getClass方法获取,也可以用当前 类名.class 表示。 */ class Ticket implements Runnable { private static int num = 100; // Object obj = new Object(); boolean flag = true; publi

ruanhao1203的专栏 686

多线程学习笔记(4)静态同步函数

当一个变量被static修饰的时候,它会被放在永久区里面。当class文件被加载的时候就会被初始化。静态同步函数,用的是当前字节码文件作为锁。即(TrianThread.Class文件)...

huermiss的博客 158

黑马程序员_Java基础[27]_静态同步函数

---------- android培训 、java培训 、期待与您交流! ---------- ---------- android培训、 java培训 、期待与您交流!---------- 黑马官网: http://edu.youkuaiyun.com/heima

Hnotify的专栏 505

Java-初步认识-第十三章-验证静态同步函数的锁

一.接下来更加深入地讲解一下,示例还是卖票,但是程序稍作了修改。也就是调用的同步函数有多个修饰符,有了static的存在。由于show函数是静态的,访问的num,那么num也要修改为静态的变量。其实num静不静态都一样,都是共享数据。在加了两个静态修饰符后,再次编译运行一下程序。DOS结果显示又出现了安全问题。为啥?就是验证一点,静态同步函数用的锁绝对不是this,静态方法当中根本就没有this。...

纵横阡陌 271

java中多线程同步函数this锁的证明以及静态同步函数的锁

//首先是对多线程this锁的证明,这里是看大牛博客的然后自己理解了的学习笔记,这里模拟两个窗口进行车票的售卖,当两个窗口对同一资源车票在竞争过程中产生的同步问题,因此通过加锁解决数据安全问题,代码中若将sale1中的synchronized中的this锁换为obj也就是再类中的域定义的锁的时候会出现数据安全问题。 //如何证明:对于两个线程,同时启动,一个线程使用同步函数,另一个使用同步代码块...

small__snail__5的博客 839

多线程——静态同步函数的锁的相关问题

package com.qianfeng.demo01; /** * 关于静态同步函数使用的锁 * * 静态同步函数的锁是什么呢? * 静态随着类的加载而加载,而这时内存中存储的对象至少有一个,也就是该类的字节码文件对象。 * * 这个对象的表现形式:类名.class 他表示字节码文件对象, Class类的对象 * */ public class ThreadDemo03

u012369385的专栏 1034

多线程同步实现原理、同步函数、同步代码块、静态同步函数(关键字synchronized)的详解。

多线程同步实现原理、同步函数、同步代码块、静态同步函数(关键字synchronized)的详解。 在说明同步函数和同步代码快、静态同步函数之前我们先想想: 什么是线程同步? 多线程为什么需要实现同步? 实现同步的原理是什么? 举个栗子:需求现在有100章火车票,有两个窗口同时抢火车票(相当于两个线程),请使用多线程模拟抢票效果。 代码如下:(此段代码非...

AE86-打破常规的博客 573
上一篇: 线程安全
下一篇: 多线程死锁问题
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值