注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Big-Time的博客

天行健,君子以自强不行。

 
 
 

日志

 
 
关于我

人生像攀登一座山,而找寻出路,却是一种学习的过程,我们应当在这过程中,学习稳定、冷静,学习如何从慌乱中找到生机。

网易考拉推荐

Java多线程示例:4个售票员卖1000张火车票  

2012-01-31 14:35:11|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
import java.util.Iterator;
import java.util.Map;

public class TicketSaler implements Runnable {
    private Map<String, Boolean> ticketMap;    // 票池
    private String salerName;    // 售票员姓名

    public TicketSaler(Map<String, Boolean> ticketMap, String salerName) {
        this.ticketMap = ticketMap;
        this.salerName = salerName;
    }

    // 售票
    private void saleTicket() {

        for (Iterator<String> it = ticketMap.keySet().iterator();;) {
            synchronized (ticketMap) {
                if (it.hasNext()) {
                    String ticketNo = it.next();
                    if (!ticketMap.get(ticketNo)) {
                        System.out
                                .println(salerName + ":" + ticketNo + "已被售出。");
                        ticketMap.put(ticketNo, true);
                    }
                } else {
                    break;
                }
            }
        }
    }

    public void run() {
        saleTicket();
    }

}




import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TicketSalerConsole {

    public static void main(String[] args) {
        Map ticketMap = new HashMap<String, Boolean>();
        for (int i = 1; i <= 100; i++) {    // 生成100张火车票
            ticketMap.put("T" + i, false);
        }

        // 生成4个售票窗口
        TicketSaler s1 = new TicketSaler(ticketMap, "Window 1");
        TicketSaler s2 = new TicketSaler(ticketMap, "Window 2");
        TicketSaler s3 = new TicketSaler(ticketMap, "Window 3");
        TicketSaler s4 = new TicketSaler(ticketMap, "Window 4");

        Thread t1 = new Thread(s1);
        Thread t2 = new Thread(s2);
        Thread t3 = new Thread(s3);
        Thread t4 = new Thread(s4);

        t1.setName("T1");
        t2.setName("T2");
        t3.setName("T3");
        t4.setName("T4");

        ExecutorService service = Executors.newCachedThreadPool();

        service.execute(t1);
        service.execute(t2);
        service.execute(t3);
        service.execute(t4);

        service.shutdown();// 执行完线程池中的线程后尽快退出
    }

}
  评论这张
 
阅读(983)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017