一、前几天去面试,被大师问道一些很基础的问题,感觉自己答的很不满意,闲话不多说,进入正题.

二、为什么要使用同步?
因为当我们有多个线程要同时访问同一个变量或对象时,如果这些线程中午既有读又有写操作时,就会导致变量值或者对象的状态出现混乱,从而导致程序异常,举个例子:如果同一个银行账户被连个线程操作,一个存钱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多线程同步的五种方法相关推荐

  1. java多线程同步的四种方法_java中实现多线程的两种方法

    java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...

  2. Java学习笔记---多线程同步的五种方法

    一.引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊.闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会 ...

  3. 实现Java线程同步的五种方法

    线程同步概念 Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不明确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的 ...

  4. java线程同步的五种方法

    2019独角兽企业重金招聘Python工程师标准>>> 1.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, ...

  5. Android 价值千万java多线程同步 lt;五CountDownLatch(计数器)和Semaphore(信号量)

    1).Android 价值千万   java线程专题:Wait&notify&join&Yield http://blog.csdn.net/whb20081815/artic ...

  6. Java字符串拼接的五种方法,哪种性能最好?

    作者 | 老坛酸菜WH 来源 | https://www.cnblogs.com/twzheng/p/5923642.html > 字符串拼接一般使用"+",但是" ...

  7. 【Java】Java字符串拼接的五种方法,哪种性能最好?

    字符串拼接一般使用"+",但是"+"不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开发应选择合适的方法实现. 加号 &quo ...

  8. Java实现线程同步的五种方法

    一.使用synchronized关键字 由于每个java对象都有一个内置锁,用synchronized修饰方法或者代码块时,内置锁会保护整个方法或代码块,要想执行这个方法或者代码块必须获得其内置锁,运 ...

  9. java线程同步的7种方法

    为何要使用同步?      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有 ...

最新文章

  1. javascript晚绑定_JavaScript的应用,调用和绑定通过托管野餐来解释
  2. 贴别人的一个文件加密程序!
  3. 魔兽世界高法伤技能列表
  4. 微软服务器系统玩游戏,微软将于2020年1月22日关闭Windows7游戏服务器
  5. 3_1 StrategyMode.cpp 策略模式
  6. hive插入数据:FAILED: ParseException line 1:12 missing TABLE at 'student' near 'EOF'
  7. switch用法和原理
  8. 如何评价一个产品经理工作做的好坏?
  9. 支付宝借呗频繁借还款对征信有影响吗?
  10. 如何将VBE中模块、工作表、工作簿和窗体等内的所有代码一次导出?
  11. 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划
  12. python网页设计基础教程_Pillow-优秀的Python图像处理库安装及入门教程
  13. vmd分解matlab程序,matlab中使用VMD(变分模态分解)
  14. 知识图谱+Recorder︱中文知识图谱API与工具、科研机构与算法框架
  15. 轻量级神经网络——shuffleNet
  16. 关于配置移动硬盘上的Eclipse+mingw+qt4.5.3的问题解决!
  17. Go语言 windows环境安装
  18. 汇编语言——偏移地址超过有效地址FFFFH
  19. My Sixtieth Page - N皇后 - By Nicolas
  20. 艾永亮:2平米的Manner如何战胜200平米的星巴克

热门文章

  1. 【译】 我从高薪科技工作中学到的惨痛教训#IT人的升职加薪tips#
  2. JS/Canvas在图片上画点画线不规则图形,并获取图片上的坐标
  3. 5G无线技术(笔记)
  4. php 控制函数执行时间,php set_time_limit(0) 设置程序执行时间的函数
  5. 算法篇之完整的大数!!!(我能想到的高精度就这么多了)
  6. 2021年安全员-C证-专职安全生产管理人员(广东省)及安全员-C证-专职安全生产管理人员(广东省)理论考试
  7. 百度文库实现方案 openoffice.org 3 + swftools+flexpaper+java
  8. html跨行跨列学生报名表,HTML表格跨行、跨列操作(rowspan、colspan)
  9. 高效 OC开发之对象、消息、运行时
  10. 在币圈那么久,你不知道量化交易是什么,你就OUT了