Java之多线程窗口卖票问题(Runnable)


/** * 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * 存在线程的安全问题,待解决。 */class Window1 implements Runnable{

    private int ticket = 100;

    @Override    public void run() {        while(true){            if(ticket > 0){                System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + ticket);                ticket--;            }else{                break;            }        }    }}

public class WindowTest1 {    public static void main(String[] args) {        Window1 w = new Window1();

        Thread t1 = new Thread(w);        Thread t2 = new Thread(w);        Thread t3 = new Thread(w);

        t1.setName("窗口1");        t2.setName("窗口2");        t3.setName("窗口3");

        t1.start();        t2.start();        t3.start();    }

}

原文地址:https://www.cnblogs.com/wpy188/p/12094095.html

时间: 2024-08-11 08:48:15

Java之多线程窗口卖票问题(Runnable)的相关文章

Java之多线程窗口卖票问题(Thread)

/** * * 例子:创建三个窗口卖票,总票数为100张.使用继承Thread类的方式 * * 存在线程的安全问题,待解决. * */class Window extends Thread{ private static int ticket = 100; @Override public void run() { while(true){ if(ticket > 0){ System.out.println(getName() + ":卖票,票号为:" + ticket); t

多线程之多窗口卖票&线程之间的通信

案例一:使用多线程完成三个窗口卖票(不能出现重复卖票以及负数票) 卖票程序SellTicket 这里使用Lock类中的方法实现加锁和释放锁! package cn.itcast.thread2; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SellTicket implements Runnable { private int ticke

多线程(多窗口卖票例子)

实现多线程的方式: 实现多线程的方式有多种,这里只列举两种常用的,而第一种继承Thread的方式无法实现多窗口卖票. 一,继承Thread方式: 特点:多线程多实例,无法实现资源的共享. 例子: 1 package com.demo.study.multithreading; 2 3 public class MyThread extends Thread{ 4 5 private int i = 10; 6 // 可以自行定义锁,也可以使用实例的锁 7 Object mutex = new O

java多线程实现卖票小程序

1 package shb.java.demo; 2 /** 3 * 多线程测试卖票小程序. 4 * @Package:shb.java.demo 5 * @Description: 6 * @author shaobn 7 * @Date 2015-9-2下午7:49:53 8 */ 9 public class TestSyn { 10 public static void main(String[] args) { 11 //此注释为实现方式一 12 /*TicketDemo td = n

Java多窗口卖票问题详解

Java多窗口卖票问题详解 Java 在练习Java多线程的过程中,通常都会通过多窗口卖票这个问题来详细逐渐解析多线程的线程同步,其中涉及到同步代码块,同步方法和互斥锁. 铁道部发布了一个售票任务,销售1000张票,要求有10个窗口来进行销售,请编写多线程程序来模拟这个效果. 第一步 class Test4Thread extends Thread { private static int tickets = 1000; @Override public void run() { while (

java多线程实现卖票程序

本文采用java多线程实现了模拟车站多个车票卖票的功能. 关键词:java多线程 共享变量 实现runnable接口 volatile  线程同步. 代码如下 Ticket类 package ex7_TicketSaler; /*同一对象的多个线程thread0/1/2,对共享变量count的操作,需要将count的值声明为volatile * 并且因为多个线程操作的是同一个对象ticket,因此count是资源共享的 * */ public class Ticket implements Ru

java 多线程之卖票两种方式

1.通过extends Thread 1 /* 2 需求:简单的卖票,多个窗口同时买票 3 (共用资源) 4 创建线程的第二种方式:实现Runnable接口 5 6 步骤: 7 1,定义类实现Runnable接口 8 2,覆盖/重写Runnable接口中的run方法 9 将将线程要运行的代码存放在该run方法中 10 3,通过Thread类建立线程对象 11 4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数 12 为什么要将Runnable接口的子类对象传递给Thr

Java Tread多线程(1)实现Runnable接口

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39347245 本文演示,Tread多线程实现Runnable接口,以及简单的说明为什么有这种创建线程的方法. 一.创建线程的2中方法: 1)继承Thread类实现多线程,参见我的上一篇文章:Java Tread多线程(0)一个简单的多线程实例 : 2)第二种方法就是实现Runnable接口,创建一个新线程. 二.为什么要有这两种方法创建线程呢? ①主要原因:就是方法1)不

窗口卖票的线程解决方案

1 public class SellTicket implements Runnable { 2 // 定义100张票 3 private int tickets = 100; 4 //创建锁对象 5 private Object obj = new Object(); 6 7 @Override 8 public void run() { 9 while (true) { 10 synchronized (obj) { 11 if (tickets > 0) { 12 try { 13 Th