java多线程同步的五种方法
一、前几天去面试,被大师问道一些很基础的问题,感觉自己答的很不满意,闲话不多说,进入正题.
二、为什么要使用同步?
因为当我们有多个线程要同时访问同一个变量或对象时,如果这些线程中午既有读又有写操作时,就会导致变量值或者对象的状态出现混乱,从而导致程序异常,举个例子:如果同一个银行账户被连个线程操作,一个存钱1000.00,一个取1000.00,假设该账户原本为金额为0.00,如果取钱线程和存钱线程同时发生,会出现什么结果?取钱失败,账户余额:1000.00或者是取钱成功,账户余额为0.00?是不是能明确是哪一个?那么就会给银行的存取款业务带来混乱的操作局面。
这时候就需要我们的多线程同步。
三、五种线程同步的方法?
1.同步方法:使用sychronized关键字修饰方法,由于java的每个对象都有一个内置锁,当用此关键字修饰方法(静态与非静态都可修饰)时,内置锁会保护整个方法,在调用该方法时,在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
2.同步代码块:既有sychronized修饰的语句块,被该关键字修饰的语句块会被自动加上内置锁,从而实现同步。(注意:线程同步是一个高开销的操作,因此应当尽量减少同步的内容,通常没必要同步整个方法)
3.使用特殊域变量(Volatile)实现线程同步.因为Volatile不能保证原子操作导致的,因此Volatile不能代替sychronized,此外Volatile会组织编译器对代码优化,因此不建议使用它,
4.使用重入锁对线同步(javaSE5.0以上中新增了一个java.util.concurrent包来支持同步)
5.使用局部变量实现线程同步
java多线程同步的五种方法相关推荐
- java多线程同步的四种方法_java中实现多线程的两种方法
java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...
- Java学习笔记---多线程同步的五种方法
一.引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊.闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会 ...
- 实现Java线程同步的五种方法
线程同步概念 Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不明确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的 ...
- java线程同步的五种方法
2019独角兽企业重金招聘Python工程师标准>>> 1.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, ...
- Android 价值千万java多线程同步 lt;五CountDownLatch(计数器)和Semaphore(信号量)
1).Android 价值千万 java线程专题:Wait¬ify&join&Yield http://blog.csdn.net/whb20081815/artic ...
- Java字符串拼接的五种方法,哪种性能最好?
作者 | 老坛酸菜WH 来源 | https://www.cnblogs.com/twzheng/p/5923642.html > 字符串拼接一般使用"+",但是" ...
- 【Java】Java字符串拼接的五种方法,哪种性能最好?
字符串拼接一般使用"+",但是"+"不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开发应选择合适的方法实现. 加号 &quo ...
- Java实现线程同步的五种方法
一.使用synchronized关键字 由于每个java对象都有一个内置锁,用synchronized修饰方法或者代码块时,内置锁会保护整个方法或代码块,要想执行这个方法或者代码块必须获得其内置锁,运 ...
- java线程同步的7种方法
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有 ...
最新文章
- javascript晚绑定_JavaScript的应用,调用和绑定通过托管野餐来解释
- 贴别人的一个文件加密程序!
- 魔兽世界高法伤技能列表
- 微软服务器系统玩游戏,微软将于2020年1月22日关闭Windows7游戏服务器
- 3_1 StrategyMode.cpp 策略模式
- hive插入数据:FAILED: ParseException line 1:12 missing TABLE at 'student' near 'EOF'
- switch用法和原理
- 如何评价一个产品经理工作做的好坏?
- 支付宝借呗频繁借还款对征信有影响吗?
- 如何将VBE中模块、工作表、工作簿和窗体等内的所有代码一次导出?
- 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划
- python网页设计基础教程_Pillow-优秀的Python图像处理库安装及入门教程
- vmd分解matlab程序,matlab中使用VMD(变分模态分解)
- 知识图谱+Recorder︱中文知识图谱API与工具、科研机构与算法框架
- 轻量级神经网络——shuffleNet
- 关于配置移动硬盘上的Eclipse+mingw+qt4.5.3的问题解决!
- Go语言 windows环境安装
- 汇编语言——偏移地址超过有效地址FFFFH
- My Sixtieth Page - N皇后 - By Nicolas
- 艾永亮:2平米的Manner如何战胜200平米的星巴克
热门文章
- 【译】 我从高薪科技工作中学到的惨痛教训#IT人的升职加薪tips#
- JS/Canvas在图片上画点画线不规则图形,并获取图片上的坐标
- 5G无线技术(笔记)
- php 控制函数执行时间,php set_time_limit(0) 设置程序执行时间的函数
- 算法篇之完整的大数!!!(我能想到的高精度就这么多了)
- 2021年安全员-C证-专职安全生产管理人员(广东省)及安全员-C证-专职安全生产管理人员(广东省)理论考试
- 百度文库实现方案 openoffice.org 3 + swftools+flexpaper+java
- html跨行跨列学生报名表,HTML表格跨行、跨列操作(rowspan、colspan)
- 高效 OC开发之对象、消息、运行时
- 在币圈那么久,你不知道量化交易是什么,你就OUT了