package com.test;

 public class SaleTickets implements Runnable
 {
     private int ticketCount = 10;// 总的票数
     Object mutex = new Object();// 锁

     /**
      * 卖票
      */
     public void sellTicket()
     {
         synchronized (mutex)// 当操作的是共享数据时,
                         // 用同步代码块进行包围起来,这样在执行时,只能有一个线程执行同步代码块里面的内容
         {
             if (ticketCount > 0)
             {
                 ticketCount--;
                 System.out.println(Thread.currentThread().getName()
                         + "正在卖票,还剩" + ticketCount + "张票");
             }
             else
             {
                 System.out.println("票已经卖完!");
                 return;
             }
         }
     }

     public void run()
     {
         while (ticketCount > 0)// 循环是指线程不停的去卖票
         {
             sellTicket();
             /**
              * 在同步代码块里面睡觉,和不睡效果是一样 的,作用只是自已不执行,也不让线程执行
              * 所以把睡觉放到同步代码块的外面,这样卖完一张票就睡一会,让其他线程再卖,这样所有的线程都可以卖票
              */
             try
             {
                 Thread.sleep(100);
             }
             catch (InterruptedException e)
             {
                 e.printStackTrace();
             }
         }
     }
 }

下面是调用

 package com.test;

 public class TicketMain
 {

     public static void main(String[] args)
     {
         SaleTickets runTicekt = new SaleTickets();
         Thread th1 = new Thread(runTicekt, "窗口1");
         Thread th2 = new Thread(runTicekt, "窗口2");
         Thread th3 = new Thread(runTicekt, "窗口3");
         Thread th4 = new Thread(runTicekt, "窗口4");
         th1.start();
         th2.start();
         th3.start();
         th4.start();
     }

 }

执行效果:

Java多线程卖票例子的更多相关文章

  1. 对于JAVA多线程卖票小程序的理解

    昨天把多线程重新看了一遍,发现自己还是有许多需要理解的地方,现在写一篇总结. 一:利用继承Thread类会出现的问题: public class SellTicketsThread extends T ...

  2. Java实现卖票程序(两种线程实现)

    /** * 2019年8月8日16:05:05 * 目的:实现火车站卖票系统(第一种创建线程的方式) * @author 张涛 * */ //第一种方式直接继承Thread来创建线程 class T1 ...

  3. Java多线程基础知识例子

    一.管理 1.创建线程 Thread public class Main { public static void main(String[] args) { MyThread myThread = ...

  4. Java 多线程 socket 取款例子 runnable callable

    socket部分参考 http://blog.csdn.net/kongxx/article/details/7259465 取款部分参考 http://blog.csdn.net/dayday198 ...

  5. java多线程的常见例子

    收藏 http://blog.csdn.net/wenzhi20102321/article/details/52524545

  6. Java多线程_复习(更新中!!)

    java多线程的常见例子 一.相关知识: Java多线程程序设计到的知识: (一)对同一个数量进行操作 (二)对同一个对象进行操作 (三)回调方法使用 (四)线程同步,死锁问题 (五)线程通信 等等 ...

  7. java多线程—Runnable、Thread、Callable区别

    多线程编程优点 进程之间不能共享内存,但线程之间共享内存非常容易. 系统创建线程所分配的资源相对创建进程而言,代价非常小. Java中实现多线程有3种方法: 继承Thread类 实现Runnable接 ...

  8. Java多线程同步和异步问题

    我们首先来说一下多线程: 多线程很形象的例子就是:在一个时刻下,一个班级的学生有人在拖地,有人在擦窗户,有人在擦桌子 按照单线程程序,肯定是先去拖地,再去擦窗户,再去擦桌子.但是在多线程就好像他们在一 ...

  9. Java多线程——线程范围内共享变量

    多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. package java_ ...

随机推荐

  1. initialize和init以及load方法的区别与使用以及什么时候调用

    initialize不是init initialize在这个类第一次被调用的时候比如[[class alloc]init]会调用一次initialize方法,不管创建多少次这个类,都只会调用一次这个方 ...

  2. js操作数组

    一.数组的声明方式: var colors = new Array();//创建数组 var colors = new Array(20);//创建20个长度的数组 var colors = new ...

  3. 中断ORACLE数据库关闭进程导致错误案例

    昨晚下班的时候,我准备关闭本机的虚拟机上的ORACLE数据库后准备下班,但是由于我SecureCRT开了多个窗口,结果一不小心,疏忽之下在一个生产服务器上执行了shutdown immediate命令 ...

  4. sp_configure错误:不支持对系统目录进行即席更新。

    今天在一台数据库服务器上(Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)     Standard Edition (64-bit))使 ...

  5. 从零自学Hadoop(06):集群搭建

    阅读目录 序 集群搭建 监控 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一 ...

  6. 【hive】——Hive基本操作

    阅读本文章可以带着下面问题:1.与传统数据库对比,找出他们的区别2.熟练写出增删改查(面试必备) 创建表:hive> CREATE TABLE pokes (foo INT, bar STRIN ...

  7. OpenStack云计算快速入门之三:OpenStack镜像管理

    原文:http://blog.chinaunix.net/uid-22414998-id-3272059.html 第三部分 OpenStack镜像管理 一.简介 很多源都有为OpenStack已经编 ...

  8. [HTML表格]在databases显示行的附加信息

    模板代码: <!-- DataTables CSS --> <link rel="stylesheet" href="{% static 'DataTa ...

  9. 让IE8在win7下面能显示使用window.showmodaldialog弹出窗口的地址状态栏

    问题来源:最近又要对老的系统进行改善,由于用到了window.showmodaldialog这个方法弹出窗口,比如从主界面弹出新增或者修改窗口,如下图所示,显示没有地址栏,进行代码修改还要找到相应的文 ...

  10. leetcode -- Convert Sorted List to Binary Search Tree

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...