线程同步问题,线程上锁---多线程“卖票”实例
2009-09-17 16:56
253 查看
线程1执行,其它三个上锁。
程序运行结果:
当前票数是:100售出0线程名:t1
当前票数是:99售出1线程名:t2
当前票数是:98售出2线程名:t3
当前票数是:97售出3线程名:t4
当前票数是:96售出4线程名:t1
当前票数是:95售出5线程名:t2
当前票数是:94售出6线程名:t3
当前票数是:93售出7线程名:t4
当前票数是:92售出8线程名:t1
当前票数是:91售出9线程名:t2
当前票数是:90售出10线程名:t3
当前票数是:89售出11线程名:t4
当前票数是:88售出12线程名:t1
当前票数是:87售出13线程名:t2
当前票数是:86售出14线程名:t3
当前票数是:85售出15线程名:t4
当前票数是:84售出16线程名:t1
当前票数是:83售出17线程名:t2
当前票数是:82售出18线程名:t3
当前票数是:81售出19线程名:t4
当前票数是:80售出20线程名:t1
当前票数是:79售出21线程名:t2
当前票数是:78售出22线程名:t3
当前票数是:77售出23线程名:t4
当前票数是:76售出24线程名:t1
当前票数是:75售出25线程名:t2
当前票数是:74售出26线程名:t3
当前票数是:73售出27线程名:t4
............................
package demo; public class SellTickets implements Runnable{ private int tickets=100; public void run() { int count=0; while (true) { //上锁 synchronized(this){ if (tickets>0){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } count=100-tickets; System.out.println("当前票数是:"+tickets+"售出"+count +"线程名:"+Thread.currentThread().getName()); tickets--; }else{ break; } } } } public static void main(String[] args) { SellTickets r=new SellTickets(); Thread t1=new Thread(r,"t1"); t1.start(); Thread t2=new Thread(r,"t2"); t2.start(); Thread t3=new Thread(r,"t3"); t3.start(); Thread t4=new Thread(r,"t4"); t4.start(); } }
程序运行结果:
当前票数是:100售出0线程名:t1
当前票数是:99售出1线程名:t2
当前票数是:98售出2线程名:t3
当前票数是:97售出3线程名:t4
当前票数是:96售出4线程名:t1
当前票数是:95售出5线程名:t2
当前票数是:94售出6线程名:t3
当前票数是:93售出7线程名:t4
当前票数是:92售出8线程名:t1
当前票数是:91售出9线程名:t2
当前票数是:90售出10线程名:t3
当前票数是:89售出11线程名:t4
当前票数是:88售出12线程名:t1
当前票数是:87售出13线程名:t2
当前票数是:86售出14线程名:t3
当前票数是:85售出15线程名:t4
当前票数是:84售出16线程名:t1
当前票数是:83售出17线程名:t2
当前票数是:82售出18线程名:t3
当前票数是:81售出19线程名:t4
当前票数是:80售出20线程名:t1
当前票数是:79售出21线程名:t2
当前票数是:78售出22线程名:t3
当前票数是:77售出23线程名:t4
当前票数是:76售出24线程名:t1
当前票数是:75售出25线程名:t2
当前票数是:74售出26线程名:t3
当前票数是:73售出27线程名:t4
............................
相关文章推荐
- 问题: 写一个多线程程序实现铁路卖票系统,4个窗口同时售票,线程同步
- 关于单实例多线程的servlet的线程安全问题的探讨
- 静态变量、实例变量、局部变量在多线程环境下的线程安全问题 java 多线程
- 多线程创建的两种方式和线程同步问题实例
- 0019 Servlet容器的实现:单实例多线程的线程安全问题【基础】
- 多线程——用创建线程的两种方式分别解决经典窗口卖票问题
- 黑马程序员-(多线程)了解线程与如何解决线程同步到来的安全问题!(面试)
- 1多线程的概述2多线程(创建多个线程实例,并启动多个线程)的实现方式,main主方法是单线程的4多线程的实现方式5多线程模拟火车站售票出现问题7线程的声明周期
- 多线程经典问题1——主线程子线程交替问题
- 多线程的同步问题代码实例
- Qt QThread 线程创建,线程同步,线程通信 实例
- struts中Action的线程安全与实例变量和静态变量的共享问题
- winform 利用 多线程 处理窗体假死,利用 Invoke BeginInvoke 处理子线程调用 UI 控件报错的问题
- C#中的多线程-线程同步基础 (控制线程数量)
- 多线程通信实例(子线程向主线程:用委托事件实现)
- 多个线程之间共享数据的方式(卖票问题,存取款问题)
- C#使用读写锁三行代码简单解决多线程并发写入文件时线程同步的问题
- 黑马程序员——多线程操作经典实例:生产者消费者问题
- 29-多线程(线程间通信-多生产者多消费者问题-JDK1.5新特性-Condition).1 2 31-多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例). 1 2
- Servlet单实例多线程问题