《java多线程多线程案例.doc》由会员分享,可在线阅读,更多相关《java多线程多线程案例.doc(4页珍藏版)》请在三一文库上搜索。
1、public class Example8_10 public static void main(String args) String s1=张三,s2=孙大名,s3=赵中堂; Cinema canema=new Cinema(s1,s2,s3); Thread zhang,sun,zhao; zhang=new Thread(canema); sun=new Thread(canema); zhao=new Thread(canema); zhang.setName(s1); sun.setName(s2); zhao.setName(s3); zhang.start(); sun.sta
2、rt(); zhao.start(); class Cinema implements Runnable TicketSeller seller; String name1,name2,name3; Cinema(String s1,String s2,String s3) seller=new TicketSeller(); name1=s1; name2=s2; name3=s3; public void run() if(Thread.currentThread().getName().equals(name1) seller.sellTicket(20); else if(Thread
3、.currentThread().getName().equals(name2) seller.sellTicket(10); else if(Thread.currentThread().getName().equals(name3) seller.sellTicket(5); class TicketSeller int fiveNumber=1,tenNumber=0,twentyNumber=0; public synchronized void sellTicket(int receiveMoney) String s=Thread.currentThread().getName()
4、; if(receiveMoney=5) fiveNumber=fiveNumber+1; System.out.println(s+给售票员5元钱,售票员卖给+s+一张票,不必找钱); else if(receiveMoney=10) while(fiveNumber1) try System.out.println(s+给售票员10元钱); System.out.println(售票员请+s+靠边等一会); wait(); System.out.println(s+结束等待,继续买票); catch(InterruptedException e) fiveNumber=fiveNumber
5、-1; tenNumber=tenNumber+1; System.out.println(s+给售票员10元钱,售票员卖给+s+一张票,找钱5元); else if(receiveMoney=20) while(fiveNumber1|tenNumber1) try System.out.println(s+给售票员20元钱); System.out.println(售票员请+s+靠边等一会); wait(); System.out.println(s+结束等待,继续买票); 问题补充:catch(InterruptedException e) fiveNumber=fiveNumber-1
6、; tenNumber=tenNumber-1; twentyNumber=twentyNumber+1; System.out.println(s+给售票员20元钱,售票员卖给+s+一张票,找钱15元); notifyAll(); 这段代码的结果怎么是先给赵,不是应该先孙么? 可是运行的结果是先赵,后孙,后张.提问者: 夜莺声声 - 经理 四级 我来回答: 回答即可得2分,回答被采纳则获得悬赏分以及奖励20分 您还可以输入字输入内容已经达到长度限制如果需要图片来说明回答内容,可以上传图片 参考资料: 匿名回答 积分规则 回答 共 5 条看什么啊? 你连问题都没有。 回答者: 这世界无爱 -
7、秀才 二级 2009-7-18 11:36线程是同步执行的,各个线程执行的时间不同,导致有先后 回答者: lijiajia81 - 试用期 一级 2009-7-18 11:50我运行的结果是正确的张三给售票员20元钱售票员请张三靠边等一会孙大名给售票员10元钱,售票员卖给孙大名一张票,找钱5元赵中堂给售票员5元钱,售票员卖给赵中堂一张票,不必找钱张三结束等待,继续买票张三给售票员20元钱,售票员卖给张三一张票,找钱15元 回答者: zskzhao - 经理 五级 2009-7-18 11:53张三给售票员20元钱售票员请张三靠边等一会赵中堂给售票员5元钱,售票员卖给赵中堂一张票,不必找钱张三结
8、束等待,继续买票张三给售票员20元钱售票员请张三靠边等一会孙大名给售票员10元钱,售票员卖给孙大名一张票,找钱5元张三结束等待,继续买票张三给售票员20元钱,售票员卖给张三一张票,找钱15元按你的程序运行是这个结果,没看到问题啊。 回答者: james_allen - 江湖新秀 四级 2009-7-18 11:53给楼主指出的是 :1.不是哪个线程先 start 就会先执行哪个线程2.本程序中没有给任何一个线程设置优先权,所以他们都是平起平做的用一个形象的例子来比喻a,b,c三个人都是市民,没有谁是特殊的a,b,c三人依次从家里出发去车站买票,难道一定是a 先买到票,b后,c最后吗线程就是这样,有可能他们中间谁有事中途耽误了呢总之就是: 在优先权一样的情况下,只要线程已经start, 那么几个线程的运行是随机的,不是谁先start,谁先执行的,除非你的优先权高,例如你是市长就可以先买票应该明白是什么意思了。