同步代码块:

synchronized(object) {}

其中object为我们使用的同步锁,对于继承的方式,使用this或者创建一个非静态对象作为锁是无用的,无法阻止错误数据的产生。所以我们使用static的对象

同步方法:

public synchronized void method() {}

由于同步方法的锁使用的是this,当前对象,所以也是无法起效果的。所以在继承中,是不能使用同步方法操作共享数据的。

代码:

继承

在这里我们使用的是 static类型的obj对象为锁的同步代码块,避免了错误数据大帝问题。

package com.atguigu.Thread;public class TicketDemo2 {public static void main(String[] args) {Ticket1 t1 = new Ticket1();Ticket1 t2 = new Ticket1();Ticket1 t3 = new Ticket1();t1.setName("t1窗口");t2.setName("t2窗口");t3.setName("t3窗口");t1.start();t2.start();t3.start();}}class Ticket1 extends Thread  {static int tick = 100;static Object obj = new Object();@Overridepublic void run() {while(true) {synchronized(obj) {if(tick>0){try {Thread.currentThread().sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+"售出车票,ticket号为:"+ tick--);}else {break;}}}}
}

实现:

在这里由于三个线程使用一个对象,所以我们可以使用this作为锁

<span style="font-size:14px;">package com.atguigu.Thread;public class TicketDemo3 {public static void main(String[] args) {TicketTest t = new TicketTest();Thread t1 = new Thread(t);Thread t2 = new Thread(t);Thread t3 = new Thread(t);t1.setName("t1窗口");t2.setName("t2窗口");t3.setName("t3窗口");t1.start();t2.start();t3.start();}
}class TicketTest implements Runnable {private int tick = 100;public void run() {while (true) {
//          synchronized (this) {
//              if (tick > 0) {
//                  System.out.println(Thread.currentThread().getName()
//                          + "售出车票,tick号为:" + tick--);
//                  try {
//                      Thread.sleep(10);
//                  } catch (InterruptedException e) {
//                      // TODO Auto-generated catch block
//                      e.printStackTrace();
//                  }
//              } else
//                  break;sale();}}public synchronized void sale() {if (tick > 0) {System.out.println(Thread.currentThread().getName()+ "售出车票,tick号为:" + tick--);try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}</span><span style="font-size:24px;">
}
</span>

多线程卖火车票的问题相关推荐

  1. java多线程卖火车票_Java多线程小例子(三个窗口卖火车票)

    class Ticket implements Runnable{ private int TicketNum = 100; //100张火车票 private boolean flag = true ...

  2. 多线程卖火车票简单例子

    import java.util.concurrent.Callable; import java.util.concurrent.Future; import java.util.concurren ...

  3. c++多线程实例(模拟卖火车票小程序)

    //这是2个线程模拟卖火车票的小程序 #include <windows.h> #include <iostream> using namespace std;DWORD WI ...

  4. Lock锁实现多线程卖票

    理解多线程卖票demo Lock架构 使用lock替代synchronized 总结 使用Lock 实现. Lock架构 使用lock替代synchronized import java.util.c ...

  5. Python 多线程卖票问题

    Python 多线程卖票问题 在学习多线程的时候,我们经常要学习到多窗口售票这一经典案例,今天我们将用Python语言写一个简单易懂的售票程序,帮助大家学习理解 有以下要求: 第一.不能出现打印出现混 ...

  6. Java代码实现多线程卖票

    写一个多线程卖票的程序 /*** @author tom* @date 2022-03-29 15:33*/ public class SaleTickets {public static void ...

  7. 线程java买火车票_Java线程中卖火车票问题的深入讲解

    用java代码模拟卖100张火车票问题:四个售票窗口同时售票且不能卖出同一张火车票. 代码如下. package lesson; public class demo1 { public static ...

  8. 123063天两度瘫痪:为啥不在淘宝上卖火车票?

    如题:123063天两度瘫痪:为啥不在淘宝上卖火车票? 铁路春运的大幕还没有完全拉开,铁路购票网站就已经踉踉跄跄,接连发生故障. "因机房空调系统故障,正在积极组织抢修.目前暂停互联网售票. ...

  9. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

最新文章

  1. 如何用增长的思维做提效?
  2. Python之路---------Python介绍
  3. 计算机视觉、机器学习相关领域论文和源代码大集合--持续更新……
  4. C++学习之路 | PTA乙级—— 1075 链表元素分类 (25 分)(精简)
  5. pytorch torch.zeros
  6. Android源码学习之浅析SystemServer脉络
  7. 记录一下树莓派使用qBittorrent做种走弯路
  8. lodop 使用教程之图文详解 + 详细方法/参数的配置说明
  9. 安卓手机抓包方法归纳总结
  10. 十八掌教育_徐培成_Hadoop3.0-01.简介
  11. win10通过OneDrive实现办公室的电脑和家里电脑重要数据同步
  12. Java解决vue跨域问题
  13. Dubbo整合Nacos
  14. springboot 入门详细教程 源码
  15. JSP基于web网上作业提交系统
  16. 筱筱笔记:npm发包流程
  17. 自行车 forum.php,[你们城里人真会玩]关于大行折叠自行车18速..
  18. 指数加权平均(EMA)理解
  19. 翻转棋c语言算法,有没有人懂黑白棋(翻转棋)的核心算法
  20. 1.简述一个Activity跳转到另一个Activity时,两个Activity生命周期方法的执行过程。2.编写一个程序,要求在第一个界面中输入两个数字,在第二个界面显示第一个界面两个数字的和。

热门文章

  1. 为什么要升级换代为牛皮凉席
  2. 氛围灯INMP441+WS2812灯带--未完
  3. pythondebug教程_使用spyder3调试python程序的简明教程
  4. PL2303驱动程序不支持WINDOWS 11及后续版本的解决办法
  5. 复现fastreid学到的Linux指令等知识
  6. 服务器RAID管理之Megacli
  7. 基于python的unittest单元测试C语言代码
  8. CSS 设置了line-height等于行高之后文字未垂直居中
  9. 【紧急通告】马云否认支付宝出现漏洞 淘宝大量用户现金被盗 今日支付宝强制升级补丁
  10. 修改mysql默认字符集为latin1_查看、设置与修改MySQL字符集