package 多线程.synchronized锁;
/*、
*
*
*
* */
public class Sale implements Runnable {private int m = 10;@Overridepublic void run() {//保证每一个线程都必须完成,其他线程才能抢  使用同步锁 出现共享变量都要加锁  多个线程必须持有同一个锁while (true) {synchronized (this) {  //出现共享变量都要加锁  多个线程必须持有同一个锁  synchronized同步if(m > 0) {System.out.println(Thread.currentThread().getName() + "卖票---" + (m--) + "张");}else {break;}}try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}
}

package 多线程.synchronized锁;
/*、
*
* //同步方法
*
* */
public class Sale2 implements Runnable {private int m = 10;
//     Object obj = new Object();boolean run=true;@Overridepublic void run() {//保证每一个线程都必须完成,其他线程才能抢  使用同步锁 出现共享变量都要加锁  多个线程必须持有同一个锁while (run) {this.sale();try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}public  synchronized void sale(){if(m > 0) {System.out.println(Thread.currentThread().getName() + "卖票---" + (m--) + "张");}else {
//            System.exit(-1); //关闭jvm虚拟机run =false;}}
}

package 多线程.synchronized锁;public class Demo02 {public static void main(String[] args) {Sale2 sale = new Sale2();Thread t1 =new Thread(sale,"窗口1");Thread t2 =new Thread(sale,"窗口2");Thread t3 =new Thread(sale,"窗口3");t1.start();t2.start();t3.start();}
}

结果:

窗口1卖票---10张
窗口2卖票---9张
窗口3卖票---8张
窗口1卖票---7张
窗口3卖票---6张
窗口2卖票---5张
窗口2卖票---4张
窗口1卖票---3张
窗口3卖票---2张
窗口2卖票---1张

 

转载于:https://www.cnblogs.com/houtian2333/p/10702644.html

多线程-synchronized锁相关推荐

  1. 多线程Synchronized锁的使用与线程之间的通讯

    多线程Synchronized锁的使用与线程之间的通讯 一.什么是线程安全问题 二.如何解决线程安全问题 三.synchronized锁的基本用法 1.修饰代码块(this锁) 2.修饰实例方法(th ...

  2. JUC多线程:synchronized锁机制原理 与 Lock锁机制

    前言: 线程安全是并发编程中的重要关注点,造成线程安全问题的主要原因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据.因此为了解决这个问题,我们可能需要这样一个方案,当存在多 ...

  3. 【Java多线程】实现Runnable接口方式 / 继承Thread类方式;使用synchronized锁实现线程安全;线程安全的懒汉式单例模式;死锁问题示例

    Thread 的生命周期 一.实现Runnable接口方式 1.在 run 方法中使用 synchronized 块 /*** 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的 ...

  4. Java多线程4:synchronized锁机制

    脏读 一个常见的概念.在多线程中,难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过 ...

  5. 并发编程系列之五多线程synchronized是可重复加锁,重入锁

    并发编程系列之五多线程synchronized是可重复加锁,重入锁.对于重入锁的概念就是可以重复的加锁.. 示例1,在同一个类里面进行加锁,不同的方法调用,都一层一层的嵌套进行加锁,示例1演示重入锁的 ...

  6. Java多线程,锁(CAS,synchronized,AQS,ReentrantLock)

    该博客只是个人学习的笔记.如果有什么疑问或者有什么不对的都可以告诉我,目前只写了多线程和锁的部分,因为只是个人学习记录的笔记,所以写的不是很详细,里面有一些个人的见解思考供各位参考. 一.多线程 关于 ...

  7. java多线程(二)——锁机制synchronized(同步方法)

    synchronized Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中 ...

  8. 线程 synchronized锁机制

    脏读 一个常见的概念.在多线程中,难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过 ...

  9. synchronized锁的基本用法

    在多线程的情况下 需要是同一个对象锁 Synchronized(对象锁) { 需要保证线程安全的代码 } 1.修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码快前要获得 给定对象 的锁. 2.修 ...

最新文章

  1. 2021-06-06
  2. 用MyEclipse自带工具生成WebService客户端代码
  3. oracle asm clsecho,ASM磁盘组一点管理
  4. linux的wc是什么命令,linux中的wc命令
  5. iPhone/Mac Objective-C内存管理教程和原理剖析
  6. 《openssl 编程》之 DH
  7. caffemodel的大小计算
  8. java 各组件单击总数_java 获取面板上有多少个组件
  9. 小程序 搜索结果关键字标红(支持拼音)
  10. 一种标准地图服务转矢量Shapefile方法
  11. 小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear...
  12. uni-app微信小程序短信验证、微信支付
  13. 有哪些方法能将纸质书籍转成PDF电子版
  14. SpringBoot之SpringData JPA的基本使用
  15. 猫和老鼠服务器未响应是怎么回事,猫和老鼠为什么进不去
  16. SQL server 语句删除部分数据
  17. gnuplot画图点线设置
  18. 基于MaxEnt模型的云南红豆杉潜在适宜分布预测
  19. 《黑镜》第一季观后感
  20. 重新注册系统所有dll文件

热门文章

  1. css 文字过长 省略号,css实现文字过长显示省略号的方法
  2. vmware+android+4.3,Vmware虚拟机安装安卓4.0系统教程
  3. 华为鸿蒙新概念机,华为P50概念机确认,麒麟芯片+鸿蒙系统,这才是真旗舰!...
  4. 大学生计算机基础excel视频,大学生计算机基础Excel.doc
  5. CNN模型 int8量化实现方式(二)
  6. Java调用PHP,跑PHP代码
  7. 松翰松翰c语言编程指导,松翰C程序检单例程代码下载
  8. mysql配置日志老化配置_mysql中日志的配置与分析
  9. linux更改桌面壁纸的脚本,ubuntu 桌面 壁纸 自动切换 方法 图解 linux
  10. Android中使用xml处理图片,Android布局 – 在xml中偏移背景图像