java中线程的同步

线程同步:

当有两个进程并发修改同一文件时就可能造成异常。

意思就是当一个线程要改变一个文件的内容时,却sleep了一段时间,这时另一个线程却改变了这个文件的内容。最后就会出现错误的结果。

为了解决这个问题,java多线程支持引入了同步监视器来解决这个问题。使用同步监视器的通用方法就是同步代码块。

同步代码块的语法格式如下:

synchronized(obj){

······

//此处的代码就是同步代码块

}

上面语法格式中synchronized后括号里的obj就是同步监视器,上面代码的含义是:线程开始执行同步代码块之前,必须先获得对同步监视器的锁定。

 

注意:

任何时刻智能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。

 

同步监视器:共享资源的对象。

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

 

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

Darknet-Yolov3 移植过程 本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。 阅读详情

相关推荐

基于STM32环境温湿度监测系统设计

基于STM32环境温湿度监测系统设计1. 实验目的2. 任务和要求3. proteus仿真图4. 实验代码 1. 实验目的 (1) 掌握使用 KEIL MDK5 进行软件开发的具体流程; (2) 掌握硬件电路的设计方法; (3) 掌握 STM32 微控制器的程序设计及代码编写方法。 2. 任务和要求 (1)在 STM32F103 平台下,通过温度传感器 DS18B20 和湿度传感器 DHT11 实现环境温湿度信息的采集; (2)将温度传感器和湿度传感器所采集的数据在 LCD 液晶屏幕上显示出来,超

唯一的博客 2万+

JAVA中线程同步方法

JAVA中线程同步方法 1  wait方法:         该方法属于Object的方法,wait方法的作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。         调用wait方法需要注意几点:

游海东的技术专栏 1780

内窥镜胶囊(胶囊内镜)硬件方案

内窥镜胶囊(胶囊内镜)硬件方案 前言 说明:该方案为作者2018年上半年完成的第一版,后来搁置了一段时间,才重启这个项目。目前(2020.07)第二版已经快要完成。[联系v:1#7#6#3#3#3#5#0#8#7#0]先给一下第一版和第二版的基本参数。 第一版: 续航时间:3h 帧率:0.5fps 尺寸:12mm * 25mm 角度:45° 第二版: 续航时间:12h 帧率:2-6fps 尺寸:9.8mm * 25mm 角度:130° 第一版属于尝试版,整体方案不是很成熟。第二版这个数据就非常优秀了。我拿了

CrekerLi的博客 4780

java中线程同步的理解(非常通俗易懂)

在学习线程同步时,搜索到的一篇对线程同步总结很好的文章,分享下,转载的原连链接发现还不如这个链接好,这里转载链接就写它:http://blog.youkuaiyun.com/u012179540/article/details/40685207 Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。 线程(Thread

qq_39285447的博客 4787

Windows 11 IoT企业版LTSC 24H2/25H2中文版安装指南(含OEM激活教程)

本文详细介绍了Windows 11 IoT企业版LTSC 24H2/25H2中文版的安装与OEM激活全流程。从系统镜像准备、硬件兼容性检查到自动化安装配置,再到OEM激活方案(包括SLIC注入和数字许可证激活),为工业自动化、数字标牌等物联网设备提供稳定可靠的系统部署指南。

weixin_29198045的博客 8896

【单智能体】AI 数据分析智能体案例讲解(附完整源码)

本案例将引导您构建一个基于 AI 的数据分析智能体,让用户能够通过自然语言查询来分析 CSV 和 Excel 文件中的数据,无需掌握 SQL 知识。该智能体使用 Agno Agent 框架集成 OpenAI GPT-4o 模型,并利用 DuckDB 提供高效的数据处理能力。

rengang66的博客 239

Java中线程的同步

      在多线程的程序设计中,可能会出现多个线程的代码段访问同一个资源的情况,这个代码段通常被称为临界区,这种情况有可能导致程序的错误,例如,如果一个线程在未完成对某一变量的读操作时,另一个线程又对该变量进行了写操作,那么第一个线程读入的变量值可能是一种修改过程中的不稳定值。对这类问题的解决通常都是给临界区加锁,使得这段对资源的操作成为一个原子操作。在Java中实现线程的同步通常有两种方式(同

沧海一粟的专栏 772

基于XGBoost的混凝土力学性能预测系统

本文介绍了一个基于XGBoost算法的混凝土力学性能预测系统。该系统通过模拟生成3000组混凝土配合比数据(包含水灰比、水泥用量和龄期三个关键特征),利用XGBoost强大的非线性建模能力预测混凝土抗压强度。研究背景源于传统混凝土性能测试方法耗时耗力的痛点,该系统可显著减少实验次数,优化配合比设计。系统实现包括:数据生成与特征工程(模拟真实工程数据并添加噪声和异常值)、XGBoost模型构建、以及预测性能评估。XGBoost算法因其处理非线性关系能力强、鲁棒性好等优势被选用,可为智能建造和数字化施工提供技术

huanghm88的专栏 131

Java中线程同步的理解

我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。 线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。 当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。 ...

127

【Win10/11】Windows电脑WiFi显示小地球/断网的解决方法 Windows WiFi小地球、网络连接中断、网络重置、无线网卡驱动、Win10/Win11网络修复

最近经常有粉丝留言问我,Windows 电脑突然连不上 WiFi,右下角网络图标显示成了“小地球 🌐”,或者干脆提示“未连接 - 没有可用的连接”。明明其他设备网络都正常,唯独自己的电脑断了。作为在互联网大厂混迹多年的前端程序员,我自己也碰到过这个问题。总结几种比较常见、亲测有效的解决方法,写出来供大家参考,希望能帮你快速恢复上网!问题原因推荐解决方法系统设置错乱使用网络重置功能驱动异常或冲突卸载后重启自动安装驱动驱动版本过旧手动更新网卡驱动实在不行考虑使用系统还原点或重装系统这几个方法中,

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3851

康耐视visionpro-CogBlobTool工具详细说明

康耐视visionpro-CogBlobTool工具详细说明

视觉人机器视觉的博客 1729

JAVA中线程同步的方法

JAVA中线程同步的方法 博客分类: Java   用什么关键字修饰同步方法 ? 用synchronized关键字修饰同步方法  同步有几种实现方法,都是什么?分别是synchronized,wait与notify wait():使一个线程处于等待状态,并且释放所持有的对象的lock。 sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要

guyatao13的专栏 949

索尼IMX316 标定_ToF模块相机校准

很多东西一开始给出去的并不是最优的方案,而是在客户端支持中,以及在持续不断的芯片验证中,发现还可以这么做,还能够再提升Sensor的性能,所以说这是一个持续的过程。曾经听说过一个故事,在某厂里ST产品一直作为第一供应商多年,然后近段时间即将被新兴公司的ToF产品所打败,性能报告已经出来,但是ST并没有更新产品,而是在原有产品更新了固件以及标定流程,此时产品的性能又是超越其他供应商的产品。相机矩阵不考虑镜头失真,因为理想的针孔相机没有镜头。为了准确地代表一个真实的相机,相机模型包括径向和切向的镜头畸变。

dream it possible 1155

java中线程同步的理解

点击打开链接

liu_erxy的博客 277

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

STM32F407中文手册

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

Java中线程同步问题:深度解析synchronized

我们知道,synchronized是为了解决多个线程访问同一个数据时,有可能造成数据前后不一致的现象,例如下面的程序就是数据前后不一致的例子: public class TestSync implements Runnable { Timer timer = new Timer(); public static void main(String[] args) { TestSync

weixin_41632656的博客 5063

Devexpress16.2.6破解工具

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

java 线程同步块_java中线程同步块的代码

java中线程同步块的代码package cn.jd.syn;/** 取钱线程安全*/public class SynBlockTest01 {public static void main(String[] args) {//账户Account account=new Account(1000,"结婚礼金");SynDrawing you=new SynDrawing(account,80,"可...

weixin_36290287的博客 164

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java互斥和同步_JAVA中線程互斥和同步

線程交互知識點需要從java.lang.Object的類的三個方法來學習:void notify()喚醒在此對象監視器上等待的單個線程。void notifyAll()喚醒在此對象監視器上等待的所有線程。void wait()導致當前的線程等待,直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法。當然,wait()還有另外兩個重載方法:void wait(long t...

weixin_36073714的博客 109

Java中线程同步的方法

Java中线程同步的方法      wait():使一个线程处于等待状态,并且释放所持有的对象的lock。           sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常           notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程...

用技术点亮生命,用产品温暖人心,探讨coding真谛,感悟技术精神。 111

java中线程的同步:(互斥,协作)

1.线程同步介绍:       在java中线程同步是多个线程并发执行时,在共享数据集上的互斥与协作; 互斥是为了保证数据的安全,协作是让多个线程在共享数据集上进行通讯,以确保业务的合理性。 2.线程同步FAQ: (1)为什么多个线程在共享数据集上要互斥执行(排队执行),所有的操作都要互斥吗? 什么情况下进行互斥呢?    (2)多线程互斥如何实现呢? (3)多线程在共享数据集上通

system_err的博客 718

JAVA中线程同步

线程同步是指:当多个线程并发的访问同一个资源时,需要确保资源的安全,即确保线程安全,当线程安全时,由于需要等待从而导致效率相对线程不安全时低。JAVA中线程同步可使用关键字 synchronized 实现。使用关键字synchronized实现同步有两种方式: 1、同步方法: 如public synchronized void test() {} 2、同步块: 如sync...

SEUER123的博客 207

JAVA中线程同步的几种实现方法

JAVA中线程同步的几种实现方法 一、synchronized同步的方法: 1、synchronized同步方法   即有synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。 注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类。 2、synchronized同步代码块   即有synchronized关键字修饰的语句块。 被该关键字修饰

S_X007的博客 4868

JAVA中线程同步的方法(7种)汇总

同步的方法: 一、同步方法   即有synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。 注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类。   二、同步代码块   即有synchronized关键字修饰的语句块...

呼吸的小鱼博客 156

Java中线程同步的常见方法、代码示例及对比表格

Java中线程同步的常见方法、代码示例及对比表格

爱的叹息的专栏 399

Java中线程同步方法

1  wait方法:         该方法属于Object的方法,wait方法的作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。         调用wait方法需要注意几点:         第一点:wait被调用的时候必须在拥有

542
上一篇: java中线程状态-死亡
下一篇: 同一把锁
aixirang3421
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值