黑马程序员技术交流社区

标题: 多线程_06_创建线程的第2种方式:实现Runnable接口 [打印本页]

作者: Tauruszzy    时间: 2015-5-13 11:58
标题: 多线程_06_创建线程的第2种方式:实现Runnable接口
代码一
  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. */
复制代码

作者: QQheima    时间: 2015-5-13 13:05
多线程难不难学啊,没学到呢
作者: Tauruszzy    时间: 2015-5-13 14:51
QQheima 发表于 2015-5-13 13:05
多线程难不难学啊,没学到呢

不难,前面学好后面就没那么难




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