导航:首页 > 编程语言 > java线程买票案例

java线程买票案例

发布时间:2025-04-29 02:57:31

A. java 线程池ThreadPoolExecutor 共同完成一个任务

importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.SynchronousQueue;
importjava.util.concurrent.ThreadPoolExecutor;
importjava.util.concurrent.TimeUnit;

publicclassDemo{

publicstaticvoidmain(String[]args){
Ticketticket=newTicket(50);//多线程共享对象
SalersalerA=newSaler("售票员",ticket);
SalersalerB=newSaler("售票员B",ticket);
SalersalerC=newSaler("售票员C",ticket);

ExecutorServicethreadPool=newThreadPoolExecutor(0,10,60L,TimeUnit.MILLISECONDS,
newSynchronousQueue<Runnable>(),newThreadPoolExecutor.DiscardOldestPolicy());

threadPool.execute(salerA);
threadPool.execute(salerB);
threadPool.execute(salerC);
}
}

//售票员
classSalerimplementsRunnable{

privateStringname;
privateTicketticket;

publicSaler(Stringname,Ticketticket){
this.name=name;
this.ticket=ticket;
}

@Override
publicvoidrun(){
while(ticket.getRemain()>0){
ticket.sale(name,1);
try{
Thread.sleep(100);//延迟100ms
}catch(InterruptedExceptione){
}
}
}

}

//车票信息
classTicket{
privateintremain;//余票数量

publicTicket(intremain){
this.remain=remain;
}

//卖票
publicvoidsale(Stringname,intcount){
synchronized(this){//同步锁,保证一张车票同一时刻只能由一个人卖
if(remain-count>-1){
remain-=count;
System.out.println("["+Thread.currentThread().getName()+"]"+name+"卖出"+count+"张车票,当前余票:"
+remain+"张");
}else{
System.out.println("票已卖完。。。");
}
}
}

publicintgetRemain(){
returnremain;
}

publicvoidsetRemain(intremain){
this.remain=remain;
}
}

B. Java语言:Java多线程怎样创建

线程有两种创建方式,继承线程类和实现线程接口。都很简单,你随便翻一下java基础就知道了

C. Java编程 假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒售出一张票。

packagetmp;

publicclassTest{
privatestaticintk=0;//售出票数
privatestaticintcount=1000;//总票数
(intn){
if(k<count){
k++;
System.out.println("第"+n+"售票点售出第"+k+"张票");
returntrue;
}
returnfalse;
}
{//售票点
intn;//售票点编号
publicSellPot(intn){
this.n=n;
}
publicvoidrun(){
while(sell(n)){
try{
Thread.sleep(100);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
publicstaticvoidmain(String[]args){
for(inti=1;i<=10;i++){
newSellPot(i).start();
}
}
}


//银行汇款
publicclassTest2{
privatestaticintk=0;//总汇款
(intm,inti,intn){
k+=m;
System.out.println("第"+n+"个顾客进行第"+(i+1)+"次汇款,银行接收总汇款"+k);
}
{//售票点
intn;//顾客编号
publicCostum(intn){
this.n=n;
}
publicvoidrun(){
for(inti=0;i<3;i++){
send(100,i,n);//汇款100
try{

Thread.sleep(100);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
publicstaticvoidmain(String[]args){
for(inti=1;i<=3;i++){
newCostum(i).start();
}
}
}

阅读全文

与java线程买票案例相关的资料

热点内容
refdoc数据库 浏览:602
传奇世界文件在哪里下载 浏览:306
国际象棋编程哪个好 浏览:255
一加5截屏在哪个文件夹 浏览:764
发送失败错误代码10009 浏览:508
word转换位图 浏览:237
百度文件包含违规内容提取不了 浏览:317
大名网站推广多少钱 浏览:791
喜欢网络词都有什么 浏览:811
怎么设置iphone网络 浏览:281
cad坐标转换图文教程 浏览:397
苹果12原装数据线怎么感觉有点硬 浏览:764
js获取div中的图片不显示不出来 浏览:291
什么网站有首映动漫 浏览:461
淘宝网络电话叫什么 浏览:231
编程要读哪些书 浏览:134
如何在手机上新建文件夹里添文件 浏览:292
先锋w10刷安卓系统 浏览:787
java设置过期日期 浏览:114
新版本抖音怎么看我的数据比例 浏览:946

友情链接