为用户批量建立私人文件夹并设定权限
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();
}
}
}
由于本人能力有限,程序可能会有错误,还请各位多多指点,小弟在这先谢谢了。
这几天学习了下线程,加上买票的事,就写了个模拟售票窗口买票的问题:有四个窗口对顾客售票,一个顾客只能买一张票.
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();
}
}
}
由于本人能力有限,程序可能会有错误,还请各位多多指点,小弟在这先谢谢了。
相关文章推荐
- 为用户批量建立私人文件夹并设定权限的批处理
- 批量查询文件服务器文件夹内特定用户的权限|acl accessenum
- CentOS 批量修改文件夹及文件用户权限和用户组权限
- C#添加文件和文件夹访问用户并设定权限
- 批量建立文件夹,为Serv_U批量创建用户
- 批量修改文件夹及文件用户权限和用户组权限 centos
- C#添加文件和文件夹访问用户并设定权限
- EXCHANGE 2007 批量添加用户的公用文件夹访问权限
- oracle 建立视图,创建用户并授予查询权限
- [MFC C++]得到用户文档路径,防止用户权限,软件不能生成新文件和文件夹
- 【CentOS】CentOS 给予普通用户对文件夹目录的所有权限
- mysql+asp.net开发注意大全:mysql创建数据库的时候,创建新用户,并且付给权限。mysql存储过程的编写,mysql数据库引擎的区别,mysql数据库文件夹备份
- linux下批量修改文件及文件夹所有者及权限
- C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
- 批量建立用户,windows和linux
- linux chmod命令参数及用法详解--文件文件夹权限设定命令
- linux学习之(四)-用户、组的操作,给文件文件夹设置组,更改目录权限、文件权限
- vsftp建立虚拟用户不同目录分配不同权限操作步骤详解
- sql server数据库建立用户、登录名、角色、权限
- SharePoint 判断用户在文件夹上是否有权限的方法