您的位置:首页 > 其它

为用户批量建立私人文件夹并设定权限

2009-10-17 20:29 399 查看
票真难买呀,咋回个家就怎么难呢?


这几天学习了下线程,加上买票的事,就写了个模拟售票窗口买票的问题:有四个窗口对顾客售票,一个顾客只能买一张票.
1.Consumer类
/**
* 顾客
* @author xpery
*
*/
public class Consumer implements Runnable {
private Ticket ticket;
public Consumer(Ticket ticket){
this.ticket= ticket;
}
public void run() {
while(true){
ticket.getConsumer();
if(ticket.ticketNum<=0){
System.out.println("售票窗口已关闭,请明天再来!");
break;
}
}
}
}

2.Windows类
/**
* 窗口
* @author Xpery
*
*/
public class Windows implements Runnable {
private Ticket ticket;

public Windows(Ticket ticket){
this.ticket = ticket;
}
public void run() {
while (true) {
ticket.saleTicket();
if(ticket.ticketNum<=0){
System.out.println("关闭售票窗口"+Thread.currentThread().getName());
break;
}
}
}
}

3.Ticket类
import java.util.Vector;

public class Ticket {
// 总票数
public int ticketNum = 100;
// 是否有顾客
private boolean isConsumer = false;
private Vector<Integer> numVector = new Vector<Integer>();

/**
* 售票
*/
public synchronized void saleTicket() {
// 是否有顾客,没有就等待
if (!isConsumer) {
try {
wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
if (ticketNum > 0) {
System.out.println(Thread.currentThread().getName() + "卖给"
+ getConsumerName() + "一张票,票号为:" + ticketNum-- + "票");
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
isConsumer = false;
notify();
}
/**
* 获取顾客
*/
public synchronized void getConsumer() {
// 是否有顾客,有就等待
if (isConsumer) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 判断票是否已经售完
if(ticketNum==0){
System.out.println("对不起,今天的票已售完,请明天早点来!");
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
isConsumer = true;
notify();
}
/**
* 获取顾客名称
* @return
*/
public String getConsumerName() {
int num = Integer.valueOf((int)(Math.random() * 999 + 1));
String consumerName="顾客" + num;
// 判断是否有人重复买票
while (numVector.contains(num)) {
System.out.println("对不起,"+consumerName+" ,您已经买了一张票,不能再买一张了");
num = Integer.valueOf((int)(Math.random() * 999 + 1));
}
numVector.add(num);
return consumerName;
}
}
4.主程序:MianTest
public class MianTest {

public static void main(String[] args) {
Ticket ticket = new Ticket();

/**
* 产生一个顾客对象,用来获取顾客
*/
Consumer consumer = new Consumer(ticket);
Thread threadConsumer = new Thread(consumer);
threadConsumer.start();

/**
* 产生四个窗口
*/
Windows windows = new Windows(ticket);
for (int i = 1; i < 5; i++) {
Thread threadWindows = new Thread(windows);
threadWindows.setName(i + "号窗口");
threadWindows.start();
}
}
}

由于本人能力有限,程序可能会有错误,还请各位多多指点,小弟在这先谢谢了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐