同一把锁

 1 public class SynchronizedClass extends Thread{
 2     private Account account;
 3     private double drawbalance;
 4     Object obj;
 5     public SynchronizedClass(String name,Account account,double drawbalance,Object obj){
 6         super(name);
 7         this.account=account;
 8         this.drawbalance=drawbalance;
 9         this.obj=obj;
10         //start();
11     }
12     public void run(){
13         try{sleep(100);}catch(Exception e){}
14         synchronized(obj){
15             if(drawbalance>account.getBalance()){
16                 System.out.println("余额不足!");
17             }else{
18                 System.out.println("吐钱成功!");
19                 try{
20                     sleep(100);
21                     System.out.println("取钱:"+drawbalance);
22                     account.setBalance(account.getBalance()-drawbalance);
23                     System.out.println("余额为:"+account.getBalance());
24                 }catch(Exception e){
25                     System.out.println(e);
26                 }
27             }
28         }
29         
30         
31     }
32     public static void main(String[] args){
33     
34         Object o=new Object();//传到了两个线程中,保证了是同一个锁。
35         Account a=new Account("刘腾",100000);
36         new SynchronizedClass("A线程",a,100000,o).start();
37         new SynchronizedClass("B线程",a,10000,o).start();
38     }    
39 }
40 
41 //账户
42 class Account {
43     private String name;
44     private double balance;
45     public Account(){}
46     public Account(String name,double balance){
47         this.name=name;
48         this.balance=balance;
49     }
50     public void setName(String name){
51         this.name=name;
52     }
53     public void setBalance(double balance){
54         this.balance=balance;
55     }
56     public String getName(){
57         return name;
58     }
59     public double getBalance(){
60         return balance;
61     }
62     
63     /*
64     public boolean equals(Object obj){
65         if(this==obj)return true;
66         if(obj==null)return false;
67         if(getClass()!=obj.getClass())return false;
68         Account other =(Account) obj;
69         if(other.name==name&&other.balance==balance)return true;
70         else return false;
71     }
72     */
73 }

 

转载于:https://www.cnblogs.com/teng-IT/p/4445558.html

高性能算力中心 — RDMA — Overview 目录 文章目录目录RDMA基于以太网的 RoCE/RDMA 计算优化NVMeNVMe Over Fabrics基于以太网的 NVMe 存储优化 RDMA RDMA(Remote DMA,远程直接内存访问)是一种新的内存访问技术,RDMA 让计算机可以直接存取其他计算机的内存,而不需要经过 CPU 耗时的处理。RDMA 将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响。RDMA 技术的原理及其与 TCP/IP 架构的对比如下图所示。 InfiniBand(IB):从一开始就支持 R 阅读详情

相关推荐

J204B接口数据链路的建立

介绍J204B数据链路层的建立方式

QUACK_G的博客 6554

Boost.mutex递归访问同一把锁造成死锁

mutex虽然可以很好地协调线程同步,互斥访问全局变量。但不慎使用,也可能会造成死锁。下面这段代码就演示了递归访问同一把锁造成的死锁:#include<iostream> #include<iomanip> using namespace std; #include <boost/thread.hpp> #include <boost/bind.hp...

KnightOnHorse的博客 1050

多重共线性问题 -- 岭回归方法

概述 本篇博客分为三大部分,线性模型、多重共线性问题和岭回归。其中,线性模型中介绍了线性模型定义和普通最小二乘法对线性模型的拟合。第二部分,借由1987-2007年的人口、消费和科技对碳排放的影响的数据来说明多重共线性问题(包括如何从定性和定量两个方面判断多重共线性问题)和多重共线性问题对普通最小二乘估计的影响。第三部分,使用岭回归对第二部分中的多重共线性问题进行拟合,并基于R2R^2R2决定系数...

楚江客的记录 1万+

4.加同一把锁

QMutex mut;//定义锁 int num=0;//定义全局变量 int main(int argc, char *argv[]) { thread_1 t1;//定义并启动俩个线程 thread_2 t2; t1.start(); t2.start(); return a.exec(); } 线程一 void thread_1::run() { while (1) { mut.lock();//上锁 num++; .

C++初学者 301

vfsglobal预约系统登录问题全解析(by quqi99)

本文全面解析VFS Global预约系统登录常见问题,包括IP限制、验证码验证失败及账号自动删除等。提供详细的解决方案,如DNS配置、浏览器设置及邮箱选择建议,帮助用户顺利完成签证预约。特别针对中国用户遇到的IP限制问题,给出了实用技巧。

gamma的博客 1342

DELL Precision T7920加装显卡遇到的坑

文章目录DELL Precision T7920加装显卡服务器原有配置介绍选购过程确认型号确认PCIE x16插槽确认电源功率和电源线安装过程电源模组线不够多单装一个3090显卡尺寸问题加装上1080Ti非常重要!官方文档 DELL Precision T7920加装显卡 实验室由于显卡计算能力不够,以及显卡显存不够,请老师花了大价钱购入了两张GeForce 3090显卡。老师赛高!记录一下这次加装显卡过程中学到的一些知识。 服务器原有配置介绍 服务器原有一张1080Ti显卡,一个16核Xeon CPU。

weixin_45520982的博客 1万+

java使用字符串作为锁,并且保证相同内容是同一把锁

java使用字符串作为锁,并且保证字符串内容相同是同一把锁。

Aesop的博客 1066

【沃顿商学院学习笔记】商业基础——Financing:05 名义利率和实际利率 APR& EAR

商业基础——名义利率和实际利率 本章主要是从名义利率和实际利率的相关概念和计算方法进行学习。 名义利率和实际利率 APR& EAR 根据下图可以直到: APR,QUOTED RATE在精算中又叫名义利率,比如一个房产贷款quoted rate or APR是12%,且按月复利,那么说明它的月实际利率是12%/12=1% EAR是effecive annual rate,在精算中叫实际利率,...

ECNU乐扣老师——区块链、可计算情感 1万+

验证子类和父类是同一把锁

知识前提: synchronized是可重入锁 一个类有两种锁,Class锁和对象锁,static方法使用的是Class锁,并且是所有static方法唯一的一把锁。对象锁是每new出来一个对象就会产生一个锁,并且这个对象的所有非静态方法共用这一个锁,不同方法的非静态方法使用的锁不是同一把锁。 验证代码: package com.gui.thread; import java.util.concurrent.TimeUnit; /** * ParentAndSonSynchr...

qq_42770022的博客 364

下采样优化实战:用ADown显著提升YOLOv11的多尺度特征保持能力

ADown 以“可编程梯度信息+多分支特征融合”打破了传统下采样的性能壁垒,为 YOLOv11 带来了多尺度特征的精准传递能力。从原理到代码集成,本教程已为你铺就了一条“小目标检测精度跃升”的实战路径。现在就动手尝试吧——当你看到模型对极小目标也能精准识别,且特征图细节完整时,你会明白这份技术探索的价值。我很乐意在你实践过程中帮你解决任何问题,让我们一起推动目标检测在下采样领域的边界。

FJN110的博客 423

YOLOv11改进 | 注意力篇 | YOLOv11引入24年ECCV的自调制特征聚合注意力模块(SMFA),并构建C2PSA_SMFA

1.SMFA介绍1.1 摘要:基于Transformer的图像复原方法由于Transformer的自注意(self-attention,SA)特性能够更好地挖掘非局部信息,从而获得更好的高分辨率图像重建效果,因此具有重要的应用价值。然而,关键点积SA需要大量的计算资源,这限制了其在低功耗器件中的应用。此外,模拟退火机制的低通特性限制了其捕获局部细节的能力,从而导致平滑的重建结果。

tsg6698的博客 952

线程间通信:生产者消费者(都要加锁,且为同一把锁)

线程间通信:生产者消费者(都要加锁,且为同一把锁)

wangyanming123的博客 1287

vue2/3 - 详细对接海康监控实时视频预览和录像回放功能,vue接入使用海康视频监控播放器实时推流等功能,支持hik/rtsp/rtmp/hls/ws取流协议(详细教程与示例代码,一键复制开箱即用

vue2,vue3,海康,vue海康视频监控,海康开放平台,如何接入海康的实时监控,海康威视,Vue实现海康监控视频播放,vue3对接海康视频监控播放、回放的方法流程,实现海康H5视频插件播放视频的实例,web网页接入海康,海康威视的视频vue的录像回放和实时预览,前端vue3项目接入海康威视h5player.js播放器,vue2接入海康威视视频监控平台,使用海康监控H5视频播放,对接海康视频监控,海康视频web插件,web前端在vue中通过海康插件嵌入视频,实现实时预览,vue3海康监控播放器组件,vue

✅ 精选推荐文章 1万+

JAVA多线程-类锁(多个对象同一把锁)

如果要使这个类的所有对象都共享一个方法的锁,那么需要将方法设置为static,再加上synchronized锁,这把锁属于类了,所有这个类的对象都共享这把锁。 继续之前的账户类,我们修改下代码 账户类: package com.ck.thread; import java.math.BigDecimal; public class Account { public stati...

成凯的专栏 3259

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

synchronized 详解

Java多线程 synchronized

m0_60005397的博客 509

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

疯狂膜拜!在Java中如何用一把锁保护多个资源?写的太详细了

在上一篇文章中,我们提到受保护资源和锁之间合理的关联关系应该是 N:1 的关系,也就是说可以用一把锁来保护多个资源,但是不能用多把锁来保护一个资源,并且结合文中示例,我们也重点强调了“不能用多把锁来保护一个资源”这个问题。而至于如何保护多个资源,我们今天就来聊聊。 当我们要保护多个资源时,首先要区分这些资源是否存在关联关系。 保护没有关联关系的多个资源 在现实世界里,球场的座位和电影院的座位就是没有关联关系的,这种场景非常容易解决,那就是球赛有球赛的门票,电影院有电影院的门票,各自管理各自的。 同样这对应到

m0_57205294的博客 337

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

对可重入锁和不可重入锁的理解,他们的区别及实现原理解析。

首先我们这里提到的锁,是把所需要的代码块,资源,或数据锁上,在操作他们的时候只允许一个线程去做操作。最终结果是为了保证cpu计算结果的正确性。   对不可重入锁的理解: public class Test{ Lock lock = new Lock(); public void methodA(){ lock.lock(); .......

Anakki的博客 2万+

synchronized 加锁 this 和 class 的区别!

synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由此可见其地位之高。然而 synchronized 却有着多种用法,当...

音视频开发进阶 408

并发编程之递归锁

递归锁 第一种情况:同一个线程一把锁加锁多次,不影响执行 from threading import RLock,currentThread,Thread r = RLock() r.acquire() r.acquire() print("over") over 第二种情况:多线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁 from threading import RLo...

weixin_30371875的博客 102

Synchronize关键字使用

这里说明下: 对象锁是指同一个对象的所有引用持有一把锁,无论是单线程还是多线程。 类锁是指同一个类的所有调用,使用同一把锁,无论是单线程还是多线程。 ...

u012803274的博客 309

Python 死锁 RLock

死锁是多线程编程中常见的问题,通常由于重复上锁或资源互相等待导致。**互斥锁(Lock)**不能被同一线程重复获得,否则会死锁。**可重入锁(RLock)**允许同一线程多次获得同一把锁,适合复杂场景。编写多线程程序时,要特别注意锁的使用,避免死锁。

qq_37805832的博客 507

synchronized——可重入性

一、synchronized的可重入性在java内部,同一线程在调用自己类中其他synchronized方法/块或调用父类的synchronized方法/块都不会阻碍该线程的执行,就是说同一线程对同一个对象锁是可重入的,而且同一个线程可以获取同一把锁多次,也就是可以多次重入。 因为java线程是基于“每线程(per-thread)”,而不是基于“每调用(per-invocation)”的(java中

SmuEdward的博客 1041

JavaSE-多线程(5)- Reentrant Lock (可重入锁)1

JavaSE-多线程(5)- Reentrant Lock (可重入锁1) 简单解释 线程A 在执行加锁方法 m 时获得锁 L,如果在m方法中调用的 方法 n 同时需要获得锁 L,那么不会出现互斥现象,即同一线程可重入同一锁对象 不同线程之间无法重入锁 例1 下例中,m1方法每隔1秒打印一次i值,共打印10次,m2方法直接输出一段文字,t1线程调用ReentrantLock1对象m1方法,主线程 睡眠 1秒后 t2 线程启动调用 ReentrantLock1 对象m2方法,由打印结果可知,t2线程在t1线程

sql2008help的博客 202

同步随笔

定义: 发现百度中关于同步关键字的定义, 同类中同步方法使用同一个锁. 大部分文章中都是对同步方法, 同步代码块, 同步对象, 同步类的测试, 没有对这种情况的说明, 只要自己测试一下. 使用多线程同时访问两个方法, 操作同一个对象. 通过观察该对象的变化, 测试同类中的同步方法使用是否是同一个锁. public class SynchronizeDemo01 { ...

dianjian7024的博客 135

ReentrantLock的可重入体现在哪方面?

的可重入性是其一个重要特性,它允许线程在持有锁的情况下,重复获取同一把锁,而不会导致死锁。这个特性在多线程编程中非常有用,尤其是在递归调用和分层方法调用的场景下。

小诸葛的博客 496

JVM Bug:多个线程持有一把锁?

在JAVA语言中,当同步块(Synchronized)被多个线程并发访问时,JVM中会采用基于互斥实现的重量级锁。JVM最多只允许一个线程持有这把锁,如果其它线程想要获得这把锁就必须处于等待状态,也就是说在同步块被并发访问时,最多只会有一个处于RUNNABLE状态的线程持有某把锁,而另外的线程因为竞争不到这把锁而都处于BLOCKED状态。

m0_64363449的博客 223
上一篇: java中线程的同步
下一篇: 线程问题求教!谢谢
aixirang3421
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值