Thread:多线程 实现简单购票

package com.heima.it;

public class duoXiCheng extends Thread{
//继承Thread类
//定义一个票数的变量 static 静态的 公用的 票数
  static int tickets = 100;

//
    public duoXiCheng() {
      super();
    // TODO 自动生成的构造函数存根
        }

    public duoXiCheng(String name) {
      super(name);
    // TODO 自动生成的构造函数存根
    //构造一个有参数的方法传递一个名字进来
      }

    @Override
    public void run() {
    // TODO 自动生成的方法存根
      //重写run()方法
      while(true){
    //synchronized 加锁 格式: 字节码文件
    synchronized (duoXiCheng.class) {
    //3.创建 Thread 类的子类的对象,
      if(tickets<1){
      //票数少于1张退出循环
        break;
       }
    try {
    //暂停100毫秒
    Thread.sleep(100);
    } catch (InterruptedException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }
    //多线程输出语句
    System.out.println(getName()+"正在出售第"+ (tickets--) +"票");
   }
}
//程序结束

}

}

}

}

/**************************************************************************************************************************/

    package com.heima.it;

    public class pingTai {

    public static void main(String[] args) {
      // TODO 自动生成的方法存根

      duoXiCheng dxc = new duoXiCheng("窗口1:");
      dxc.start();

      duoXiCheng dxc2 =new duoXiCheng("窗口2:");
      dxc2.start();

      duoXiCheng dxc3 =new duoXiCheng("窗口3:");
      dxc3.start();

      }

    }

时间: 2025-01-21 09:21:38

Thread:多线程 实现简单购票的相关文章

gdb调试多线程的简单命令

由于平时的编程当中经常会用到多线程,我想接触过多线程编程的人应该都会清楚多线程如果出了错,调起bug来是有多么麻烦,应为你某个地方出错了,有可能并不是这里的问题而是线程执行到这就切换到其他线程,而出错的是其他线程,我以前使用的办法是给某个线程sleep然后让内核自己调度去执行其他线程.很明显这种方法当有很多线程是并不是很使用,所以我就翻书学了几条调试多线程的简单gdb命令 1.测试所用的代码 1void *thread1(void *arg) 2{ 3 printf("New thread1\n

Java多线程之简单的线程同步实例

数据类: package Thread.MyCommon; public class Data { public int num = 0; public synchronized int getEven() { ++num; Thread.yield();//让另外线程先执行,加大测试效果几率 ++num; return num; } } 线程类: package Thread.MyCommon; public class myThread implements Runnable { priva

JAVA学习第六十课 — UDP协议 &amp;基于多线程模拟简单的QQ聊天程序

UDP传输 UDP有发送端和接受端,有两大类,DatagramSocket.DatagramPacket 建立发送端和接收端 建立数据包 调用Socket的接收发送方法 关闭Socket 注意:发送端和接收端是两个独立的运行程序 UDP发送端演示 DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号. public static voi

Java 多线程IO简单实用Demo

多线程主要作用是充分利用Cpu,而不在于它的乱序性.本Demo不讲它竞争什么的.之前看过乱序打印ABC的例子什么的,那些有意义吗? 本Demo 是多线程打印文件夹下的文件,主要实现是用数组存放文件,一个游标遍历. 我们需要考虑在什么时候加互斥访问,本例用synchronized . 先考虑单线程的流程:客户端启动-->读取文件下的文件放到数组(IO)--> 取游标打印 ,游标加1 -- > 改文件写文件(IO) -- 重复上两步至越界 -- 结束 多线程时显然需要在"取游标打印

C#多线程的简单例子

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; //using System.Threading.Tasks; using System.IO; using System.Collections; namespace ConsoleApplication2 { class program { static void Main(

Handler、Thread和Runnable简单分析

Handler.Thread和Runnable在开发中频繁使用,很多新手都因为概念不清而头绪全无,在这我来简单得缕缕这三者的联系与区别. Runnable是最简单的,它并没有什么包装,Android源码如下: 1 /** 2 * Represents a command that can be executed. Often used to run code in a 3 * different {@link Thread}. 4 */ 5 public interface Runnable {

Cr多线程编程简单实例

国家using System; using System.Collections;using System.Collections.Generic;using System.Threading; /// <summary>/// 在开发中经常会遇到线程的例子,如果某个后台操作比较费时间,我们就可以启动一个线程去执行那个费时的操作,同时程序继续执行.在某些情况下可能会出现多个线程的同步协同的问题,下面的例子就展示了在两个线程之间如何协同工作.//////这个程序的思路是共同做一件事情(从一个Ar

Thread多线程速查手册

常用概念线程安全停止线程守护线程多线程通讯锁Synchornized悲观锁乐观锁共享锁/独占锁读写锁的机制死锁LockReentrantLockConditionCountDownLatchCyclicBarrier信号量SemaphoreThreadLocal高并发线程安全与不安全的类不安全的spring与多线程线程池介绍线程池的优点线程池工作过程常用方法基本使用阻塞队列 toc 常用概念 线程状态 新建状态.就绪状态.运行状态.阻塞状态及死亡状态. 新建状态: 当用new操作符创建一个线程时

Boost::Thread 多线程的基础知识

Boost.Thread可以使用多线程执行可移植C++代码中的共享数据.它提供了一些类和函数来管理线程本身,还有其它一些为了实现在线程之间同步数据或者提供针对特定单个线程的数据拷贝.头文件:#include <boost/thread.hpp> 线程定义boost::thread 类是负责启动和管理线程.每个boost::thread对象代表一个单独的执行线程,是不可拷贝的.由于它是可以被移动到,所以它们可以被保存到会改变大小的容器中,并且从函数返回.这使得线程创建的详细信息可以被封装到一个函