javaSE基础编程——线程同步(模拟火车站售票操作)
2015-09-04 18:42
841 查看
用多线程模拟火车站的售票操作。
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 --;
}
}
}
用多线程模拟火车站的售票操作。
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 --;
}
}
}
相关文章推荐
- java接口与抽象类的区别总结
- Java_jdbc 基础笔记之二 数据库连接
- SPRING中的线程池ThreadPoolTaskExecutor
- Java关键字final、static使用总结
- javaSE基础编程——线程同步
- java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结
- JAVA里面的IO流(二)方法1、输入流
- javaSE基础编程——自定义线程同步
- eclipse android经验
- JAVA设计模式——单例设计模式
- javaSE基础编程——自定义线程
- Java并发编程(Callable、Future和CompletionService)
- CCF-相邻数对-201409-1
- CCF-门禁系统-201412-1
- java设计模式-模版方法
- javaSE基础编程——序列化和反序列化操作(继承Serializable接口)
- java的多线程学习(一)
- Java泛型程序设计知识梳理
- JAVA基础学习(四)---数组的操作
- javaSE基础编程——多线程(生产者和消费者)