A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码一
  1. class Ticket implements Runnable
  2. {
  3.         private int tick=100;
  4.         public void run()
  5.         {
  6.                 while(true)
  7.                 {
  8.                         if(tick>0)
  9.                         {
  10.                                 System.out.println(Thread.currentThread().getName()+"...sale:"+tick--);
  11.                         }
  12.                 }
  13.         }
  14. }
  15. class  TicketDemo
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Ticket t=new Ticket();
  20.                 Thread t1=new Thread(t);
  21.                 Thread t2=new Thread(t);
  22.                 Thread t3=new Thread(t);
  23.                 Thread t4=new Thread(t);
  24.                 t1.start();
  25.                 t2.start();
  26.                 t3.start();
  27.                 t4.start();
  28.         }
  29. }
复制代码

运行结果中的一部分:
  1. E:\sourcefile>java TicketDemo
  2. Thread-0...sale:100
  3. Thread-0...sale:98
  4. Thread-0...sale:96
  5. Thread-1...sale:99
  6. Thread-1...sale:93
  7. Thread-1...sale:92
  8. Thread-1...sale:91
  9. Thread-1...sale:90
  10. Thread-1...sale:89
  11. Thread-1...sale:88
  12. Thread-1...sale:87
  13. Thread-1...sale:86
  14. Thread-1...sale:85
  15. Thread-1...sale:84
  16. Thread-1...sale:83
  17. Thread-1...sale:82
  18. Thread-1...sale:81
  19. Thread-1...sale:80
  20. Thread-1...sale:79
  21. Thread-1...sale:78
  22. Thread-1...sale:77
  23. Thread-1...sale:76
  24. Thread-1...sale:75
  25. Thread-1...sale:74
  26. Thread-1...sale:73
复制代码

结果表明代码一解决了上一篇中的售票问题。
结论:
  1. /*创建线程的第2种方式:实现Runnable接口。
  2. 步骤:
  3. 1、定义类实现Runnable接口
  4. 2、覆盖Runnable接口中的run方法。
  5.         将线程要运行的代码存放在该Run方法中。
  6. 3、通过Thread类建立线程对象。
  7. 4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
  8.         为什么要将Runnable接口的子类对象传递给Thread的构造函数?
  9.         因为自定义的run方法所属的对象是Runnable接口的子类对象。
  10.         所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。
  11. 5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

  12. 实现方式和继承方式有什么区别?
  13.         实现方式的好处:避免了单继承的局限性。
  14.         在定义线程时,建立使用实现方式。

  15. 两种方式区别:
  16.         继承Thread:线程代码存放Thread子类run方法中。
  17.         实现Runnable:线程代码存在接口子类的run方法中。
  18. */
复制代码

2 个回复

倒序浏览
多线程难不难学啊,没学到呢
回复 使用道具 举报
QQheima 发表于 2015-5-13 13:05
多线程难不难学啊,没学到呢

不难,前面学好后面就没那么难
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马