a.售票总数为100张车票
b.由四个窗口(线程)模拟售票
线程休眠1秒钟售一张火车票.
要求:同步块,同步方法。
package com.cissst.software.synthread;
public class MainThread {
/**
* @param args
* 5.用多线程模拟火车站的售票操作。
* a.售票总数为100张车票
* b.由四个窗口(线程)模拟售票
* 线程休眠1秒钟售一张火车票.
* 要求:同步块,同步方法0
*/
public static void main(String[] args) {
//创建子线程对象
SicketThreadMethod sicket = new SicketThreadMethod();//下面用到两种实现线程同步的方法,二者选其一即可,用哪个就创建哪个子线程对象
//启动四个窗口进行售票操作
Thread t1 = new Thread(sicket,"窗口一");
Thread t2 = new Thread(sicket,"窗口二");
Thread t3 = new Thread(sicket,"窗口三");
Thread t4 = new Thread(sicket,"窗口四");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
//用到同步代码块
package com.cissst.software.synthread;
/**
* 模拟火车站售票操作
* 线程同步操作
* @author Administrator
* @date2015-8-10
*
*/
public class SicketThread implements Runnable {
//售票总数
private int count = 100;
//创建同步代码块的锁对象(任意对象)
Object lock = new Object();
/**
* 实现窗口售票
*/
@Override
public void run() {
while(count > 0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//同步代码块
synchronized(lock){
if(count > 0){
System.out.println(Thread.currentThread().getName()+
"正在售第" + count + "张车票");
//售完一张车票,剩余总票数减一
count --;
}
}
}
}
}
//用到同步方法
package com.cissst.software.synthread;
/**
* 模拟火车站售票操作
* 线程同步操作
* @author Administrator
* @date2015-8-10
*
*/
public class SicketThreadMethod implements Runnable {
//售票总数
private int count = 100;
/**
* 实现窗口售票
*/
@Override
public void run() {
while(count > 0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sellTicket();
}
}
/**
* 模拟售票操作
* 同步方法: 方法的声明中加入synchronized关键字
*/
public synchronized void sellTicket(){
if(count > 0){
System.out.println(Thread.currentThread().getName()+
"正在售第" + count + "张车票");
//售完一张车票,剩余总票数减一
count --;
}
}
}