黑马程序员技术交流社区

标题: 多线程Thread卖票程序 [打印本页]

作者: 黑马-小龙    时间: 2013-1-27 23:58
标题: 多线程Thread卖票程序
本帖最后由 张向辉 于 2013-1-29 11:59 编辑
  1. <blockquote><font size="3">package com.cxt.Thread;

  2. import java.util.Scanner;

  3. /*
  4. * 在线售票系统,创建多个线程,使他们指向同一个对象,同时启动这些对象,使其一起售票
  5. * */
  6. public class Sale_System {
  7. public static void main(String[] args) {
  8. Sale_Tickets st1 = new Sale_Tickets();
  9. // Sale_Tickets st2 = new Sale_Tickets();
  10. Thread t1 = new Thread(st1);
  11. Thread t2 = new Thread(st1);
  12. Thread t3 = new Thread(st1);
  13. Thread t4 = new Thread(st1);
  14. Thread t5 = new Thread(st1);
  15. t1.start();
  16. t2.start();
  17. t3.start();
  18. t4.start();
  19. t5.start();
  20. }
  21. }

  22. /*
  23. * 实现Runnable接口,有5个线程对象对应5个售票窗口,他们共用100张票
  24. */
  25. class Sale_Tickets extends piao implements Runnable {

  26. public void run() {
  27. while (super.shengyu > 0) {
  28. try {
  29. Thread.sleep(10);
  30. } catch (InterruptedException e) {
  31. e.printStackTrace();
  32. }
  33. synchronized (this) {//使用同步块保证票数不能超出
  34. if (super.shengyu > 0){
  35. /*count ++;
  36. shengyu --;*/
  37. maipiao();
  38. System.out.println(Thread.currentThread().getName()
  39. + "窗口,售出第" + super.count + "张票,"+"还剩"+super.shengyu+"张票");
  40. }
  41. }
  42. /*System.out.println(Thread.currentThread().getName()
  43. +"   "+ count+"    "+shengyu);*/
  44. }
  45. }
  46. }
  47. //卖票类,计算票数
  48. class piao{
  49. int count = 0;
  50. int shengyu = 100;
  51. public void maipiao(){
  52. Scanner sc = new Scanner(System.in);
  53. int i = sc.nextInt();
  54. count = count + i;
  55. shengyu = shengyu - i;
  56. System.out.println(count+"    "+shengyu);
  57. }
  58. }</font>
复制代码
求大神帮忙啊!我想测试下,线程在调用方法的时候,我通过上面方法知道他被调用了,怎么搞啊

作者: 何竹冬    时间: 2013-1-28 10:39
你是想打印正在执行的线程名字?
Thread.currentThread.getName();
作者: 逍林游    时间: 2013-1-28 11:27
Thread.currentThread.getName();你用了!
还有一点:41行的maipiao();前面掉了个super吧!:super.maipiao();






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2