同步问题的产生

由于Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时,就会有相互冲突而导致的数据不准确问题。

卖火车票案例

public class Ticket implements Runnable {private int num = 100;//假设一共有100张票@Overridepublic void run() {while (true){if (num>0){try {Thread.sleep(100);}catch (InterruptedException e){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"卖了"+num--);}}}
}
public class Nothing {public static void main(String []args){Ticket ticket = new Ticket();//4个窗口一起卖票Thread t1 = new Thread(ticket);Thread t2 = new Thread(ticket);Thread t3 = new Thread(ticket);Thread t4 = new Thread(ticket);t1.start();t2.start();t3.start();t4.start();}
}

结果不用想,肯定有脏数据,多个窗口卖出了同一张票。

问题解决

同步锁的引入,可以避免在当前线程未完成操作之前就被其他线程调用,保证数据的准确性和唯一性。
实现线程同步,有两种锁:synchronized和ReentrantLock。
当然了,synchronized和ReentrantLock也有区别!

Java并发之同步的产生及解决相关推荐

  1. java并发之同步辅助类CyclicBarrier和CountDownLatch

    CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...

  2. java 多线程的同步问题_java多线程解决同步问题的几种方式,原理和代码

    wait()/notify()方法 await()/signal()方法 BlockingQueue阻塞队列方法 PipedInputStream/PipedOutputStream 阻塞队列的一个简 ...

  3. java并发之如何解决线程安全问题

    java并发之如何解决线程安全问题 参考文章: (1)java并发之如何解决线程安全问题 (2)https://www.cnblogs.com/w2154/p/6637717.html 备忘一下.

  4. Java 并发之 AQS 详解(上)

    Java 并发之 AQS 详解 前言 Java SDK 为什么要设计 Lock 死锁问题 synchronized 的局限性 显式锁 Lock Lock 使用范式 Lock 是怎样起到锁的作用呢? 队 ...

  5. 深入理解Java并发之synchronized实现原理

    [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72828483 出自[zejian ...

  6. java实现线程同步的方法_Java实现线程同步方法及原理详解

    一.概述 无论是什么语言,在多线程编程中,常常会遇到多个线同时操作程某个变量(读/写),如果读/写不同步,则会造成不符合预期的结果. 例如:线程A和线程B并发运行,都操作变量X,若线程A对变量X进行赋 ...

  7. Java高级-线程同步机制实现

    2019独角兽企业重金招聘Python工程师标准>>> 前言 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Threa ...

  8. JAVA并发之多线程基础(5)

    上面介绍了并发编程中的栅栏等JAVA并发之多线程基础(4) .通过唯一的一个终点线来帮助确定线程是多晚开始执行下一次操作. LockSupport 提供了一个比较底层的线程挂起操作.有点类似于susp ...

  9. 你真的弄明白了吗?Java并发之AQS详解

    你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...

最新文章

  1. java字符串类型常量拼接与变量拼接的区别
  2. 神经网络第五周tutorial解析
  3. CVPR 2019 | 小样本域适应的目标检测
  4. jQuery如何选择表格每行中的第三列?
  5. Enterprise search result view column显示technical name
  6. mysql 40014无效_Oracle 问题-ORA-14400: 插入的分区关键字未映射到任何分区
  7. 辽宁计算机应用考试报名时间,2021辽宁上半年计算机应用水平考试报名时间及方法...
  8. 双曲正切matlab,如何在MatLab中用双曲正切拟合数据点?
  9. 我,马斯克:地球首富却要葬在火星
  10. JQuery(1)——JQuery如何读
  11. 软件工程实训有必要吗_软件工程专业有没有必要考研
  12. shp数据中文乱码的一种恢复方法
  13. 超实用的Django入门基础教程,新手必备!
  14. python拼音检查
  15. mysql pga_PGA的监控与调整
  16. omnipeek安装包亲测可用
  17. 微型计算机逻辑元件有哪些,目前普遍使用的微型计算机所采用的逻辑元件有哪些...
  18. Redux详解,有这一篇就够了
  19. CHAPTER 9 Web服务与应用(一)
  20. opencv创建图像,图像像素值处理、生成单通道图像和生成tif图像方法的整理

热门文章

  1. sega+model+3+android,世嘉MODEL2经典老游戏移植登场 追加联网对战
  2. win10无法连接wifi_Win10系统笔记本WIFI无法使用处理
  3. Confluence 6 Windows 中以服务方式自动重启的原因
  4. Servlet的延迟加载和预加载
  5. eclipse 中的 maven run configurations
  6. synchronsized修饰方法的使用
  7. 自学篇之--js 提取复选框和单选框的值 和纯css的3D按钮
  8. 我喜爱的FireFox插件
  9. eclipse安装Eclipse HTML Editor插件
  10. 中文Visual Studio 2005 Express Beta2不能安装在英文Longhorn Beta1上吗?