JAVA 。。5个窗口卖100张火车票 用多线程。
发布网友
发布时间:2022-05-31 17:20
我来回答
共3个回答
热心网友
时间:2023-10-20 18:51
呵呵,帮你写一个吧,每个售票窗口在0~5秒钟内卖出一张票
package thread.;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
/**
* 用list作为容器
* 这里没有生产者,因为票就那么多。
* Solder是消费者
* @version SoldTicket.java v. 1.0.0 2010-11-10
* @author Andy
*/
public class SoldTicket {
public static List<String> list = new ArrayList<String>();
public static int counter = 1;
public static Random random = new Random();
public static void main(String[]args){
initTickets();
SoldTicket st = new SoldTicket();
for(int i = 1; i<= 5;i++){
st.new Solder().start();
}
}
private synchronized String getOneTicket(){
if(list.size()<=0) return null;
return list.remove(0);
}
private static void initTickets(){
for(int i = 1 ;i <= 100 ; i++ ){
list.add("第 "+i+" 张票");
}
}
/**
* 售票的类,专管售票
* @version SoldTicket.java v. 1.0.0 2010-11-10
* @author Andy
* copyright (c) 2010 北京叁加伍网络科技有限公司 http://www.3jia5.com
*/
class Solder extends Thread{
public final int id = counter++;
public Solder(){
this.setName("售票窗口"+id);
}
@Override
public void run() {
while(!this.isInterrupted()){
String ticket = getOneTicket();
if(ticket==null){
System.out.println(this.getName()+":票已售空,明天请早");
break;
}
System.out.println(this.getName()+" 卖出了 "+ticket);
try {
TimeUnit.MILLISECONDS.sleep(random.nextInt(5000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
参考资料:手打
热心网友
时间:2023-10-20 18:51
给你个思路吧
public class Window extends Thread{
属性列表:
//窗口号
//窗口名
//窗口服务员
行为列表
public synchronized void 卖票(int 票数){
for(int i:票数){
run();
}
}
@override
public void run(){
打印信息("第"+窗口号+“号窗口卖出了一张票");
}
}
热心网友
时间:2023-10-20 18:52
能具体点不