百度指数官网登录北京优化社区防控措施方案

张小明 2026/3/2 19:57:09
百度指数官网登录,北京优化社区防控措施方案,深圳建站公司兴田德润放心,域名注册网站 不认证目录 1.场景 2.编写程序 3.解决办法#xff1a;线程同步 1)synchronized同步代码块 2)synchronized同步方法 3)两个方式的对比 4)写一个锁对象 4.使用场景 使用Lock的场景 使用synchronized的场景 1.场景 小明和小红是一对夫妻#xff0c;他们有一个共同的账户线程同步1)synchronized同步代码块2)synchronized同步方法3)两个方式的对比4)写一个锁对象4.使用场景使用Lock的场景使用synchronized的场景1.场景小明和小红是一对夫妻他们有一个共同的账户有余额十万块钱有一天他们各自同时取了十万块钱。那谁能成功取到这十万呢2.编写程序1)创建账户类创建账户对象来代表夫妻的共同账户提供取钱方法package ThreadSecurity; public class Account { private Integer money; public Account() {} public Account(Integer money) { this.money money; } public Integer getMoney() { return money; } public void setMoney(Integer money) { this.money money; } //取钱方法 public void drawMoney(Integer money) { //看看是谁来取钱 String name Thread.currentThread().getName(); //验证余额 if (this.money money) { //先打印一次以免程序执行过快反而不出现安全问题 System.out.println(name取钱成功取出了money元); this.money - money ; System.out.println(name 取钱成功,余额 this.money 元); } else { System.out.println(余额不足); } } }2)使用线程类运行两个线程来模拟取钱过程package ThreadSecurity; public class MyThread implements Runnable{ private Account account; public MyThread(Account account) { this.account account; } Override public void run() { account.drawMoney(100000); } }3)测试package ThreadSecurity; /** * 模拟线程同步问题 * 小明和小红同时取同一个账户的钱 */ public class Test { public static void main(String[] args) { //创建账户类 Account account new Account(100000); //创建小明线程 Thread xmnew Thread(new MyThread(account)); xm.setName(小明); xm.start(); //创建小红线程 Thread xhnew Thread(new MyThread(account)); xh.setName(小红); xh.start(); } }结果(也有可能是小红取钱成功)可见如果两个人都取钱成功那么银行就会亏损十万元。那么该怎么解决呢3.解决办法线程同步1)synchronized同步代码块作用把访问共享资源的核心代码块上锁以此保证线程安全在核心逻辑取钱方法当中修改package ThreadSynchronized01; public class Account { private Integer money; public Account() {} public Account(Integer money) { this.money money; } public Integer getMoney() { return money; } public void setMoney(Integer money) { this.money money; } //取钱方法 public void drawMoney(Integer money) { //看看是谁来取钱 String name Thread.currentThread().getName(); //synchronized代码块给代码块上锁 //线程通过竞争锁拿到锁对象(this)之后可以执行代码块执行完之后释放 synchronized (this) { //验证余额 if (this.money money) { //先打印一次以免程序执行过快反而不出现安全问题 System.out.println(name取钱成功取出了money元); this.money - money ; System.out.println(name 取钱成功,余额 this.money 元); } else { System.out.println(name取钱失败,余额不足); } } } }语法synchronized(锁对象){//业务逻辑......}锁对象可以是其他对象但是不建议因为如果是某一常量的话可能会影响其他无关线程的运行。用this合适因为这样不会影响其他无关线程的执行也能起到锁的作用。对于实例方法建议使用this作为锁对象对于静态方法建议使用字节码(类名.class)作为锁对象执行结果结果不唯一2)synchronized同步方法作用把访问共享资源的核心方法上锁以此保证线程安全修改取钱方法package ThreadSynchronized02; public class Account { private Integer money; public Account() {} public Account(Integer money) { this.money money; } public Integer getMoney() { return money; } public void setMoney(Integer money) { this.money money; } //取钱方法 //synchronized同步方法和synchronized代码块大致相同 //synchronized方法的性能比synchronized代码块低因为synchronized代码块可以让其他线程先处理没有线程安全的代码 //synchronized同步方法维护了一个隐式锁 public synchronized void drawMoney(Integer money) { //看看是谁来取钱 String name Thread.currentThread().getName(); //验证余额 if (this.money money) { //先打印一次以免程序执行过快反而不出现安全问题 System.out.println(name取钱成功取出了money元); this.money - money ; System.out.println(name 取钱成功,余额 this.money 元); } else { System.out.println(name取钱失败,余额不足); } } }结果(结果不唯一)3)两个方式的对比4)写一个锁对象Lock是Java并发包java.util.concurrent.locks中提供的显式锁机制相比synchronized内置锁它提供了更灵活、功能更丰富的锁控制以ReentrantLock可重入锁为例package ThreadLock; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Account { //锁对象,加上final防止锁被修改 private final Lock lock new ReentrantLock(); private Integer money; public Account() {} public Account(Integer money) { this.money money; } public Integer getMoney() { return money; } public void setMoney(Integer money) { this.money money; } //取钱方法 public void drawMoney(Integer money) { //看看是谁来取钱 String name Thread.currentThread().getName(); //ctrlaltt选中代码块 try { //上锁 lock.lock(); //验证余额 if (this.money money) { //先打印一次以免程序执行过快反而不出现安全问题 System.out.println(name取钱成功取出了money元); this.money - money ; System.out.println(name 取钱成功,余额 this.money 元); } else { System.out.println(余额不足); } } catch (Exception e) { throw new RuntimeException(e); }finally { //unlock必须执行如果前面发生异常也要解锁所以要在finally里面 lock.unlock(); } } }结果(不唯一):4.使用场景使用Lock的场景需要高级功能可中断、超时、尝试锁需要多个条件变量复杂的线程协调读写分离场景读多写少需要公平性控制按顺序获取锁性能关键场景高竞争下的性能优化使用synchronized的场景简单同步需求基本的互斥访问代码简洁性减少代码复杂度自动管理避免忘记释放锁内建优化JVM对synchronized有深度优化
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

手机建网站 教程自行建网站 所需费用

护网行动全攻略 2025:从认知到参与,攻防实战能力提升指南 一、什么是护网行动?国家级攻防演练的核心解读 护网行动(HW 行动)是由公安部牵头组织,联合金融、能源、交通等关键信息基础设施行业单位开展的国家…

张小明 2026/1/11 2:01:59 网站建设

网站开发的程序平台试管婴儿网站建设

全面掌握CD与DVD的使用技巧 在计算机的日常使用中,CD和DVD仍然是重要的存储和数据传输介质。了解如何正确使用它们,包括插入、查看内容、复制文件、刻录等操作,对于数据管理和娱乐体验都非常重要。下面将详细介绍CD和DVD的各种使用方法和相关注意事项。 插入CD或DVD后的情…

张小明 2026/1/11 1:59:57 网站建设

一些好用的网站wordpress 缩略图 gif

​ 如今,量化分析在股市领域风靡一时,其核心要素在于数据,获取股票数据,是踏上量化分析之路的第一步。你可以选择亲手编写爬虫来抓取,但更便捷的方式,莫过于利用专业的股票数据API接口。自编爬虫虽零成本&a…

张小明 2026/1/11 1:57:55 网站建设

湖南营销型网站建设公司微信小程序开发实战课后答案

faster-whisper词级时间戳技术终极指南:从模糊到毫秒级精准定位 【免费下载链接】faster-whisper plotly/plotly.js: 是一个用于创建交互式图形和数据可视化的 JavaScript 库。适合在需要创建交互式图形和数据可视化的网页中使用。特点是提供了一种简单、易用的 API…

张小明 2026/1/12 4:09:09 网站建设

南通网站建设教程青岛建站合作

2025年RAG技术未因长上下文普及而消亡,反而演变为更成熟的"上下文工程"。行业共识是"检索前置,长文后置",RAG架构重构实现搜索与阅读解耦。形态上从被动查询进化为主动推理的RAR、Agentic RAG和Memory-Augmented RAG。RA…

张小明 2026/1/12 3:38:56 网站建设

快递网站怎么做的wordpress漂浮花瓣

科研数据探索新维度:NSFC项目智能分析系统深度体验 【免费下载链接】nsfc 国家自然科学基金查询 项目地址: https://gitcode.com/gh_mirrors/nsf/nsfc 当科研工作者面对海量的国家自然科学基金数据时,如何快速获取有效信息成为了一道难题。今天&a…

张小明 2026/1/11 1:51:45 网站建设