Thread--Thread和Runnable

Love The Way You Lie 2022-06-18 03:54 380阅读 0赞

在Java中常用的实现多线程的两种方式是使用Thread类或者实现Runnable接口。

Runnable是一个接口,并且只包含了一个run()方法。

基于Java8的Runnable源码:

  1. @FunctionalInterface
  2. public interface Runnable {
  3. /**
  4. * When an object implementing interface <code>Runnable</code> is used
  5. * to create a thread, starting the thread causes the object's
  6. * <code>run</code> method to be called in that separately executing
  7. * thread.
  8. * <p>
  9. * The general contract of the method <code>run</code> is that it may
  10. * take any action whatsoever.
  11. *
  12. * @see java.lang.Thread#run()
  13. */
  14. public abstract void run();
  15. }

Runnable示例代码:实现Runnable接口,再通过Thread的构造函数创建线程。

  1. public class MyThread implements Runnable{
  2. private int ticket=10;
  3. public void run() {
  4. // TODO 自动生成的方法存根
  5. for(int i=0;i<20;i++)
  6. {
  7. if(this.ticket>0)
  8. {
  9. System.out.println(Thread.currentThread().getName()+" 卖票:ticket"+this.ticket--);
  10. }
  11. }
  12. }
  13. }
  14. public class Hello {
  15. public static void main(String [] agrs)
  16. {
  17. MyThread myThread=new MyThread();
  18. Thread t1=new Thread(myThread);
  19. Thread t2=new Thread(myThread);
  20. Thread t3=new Thread(myThread);
  21. t1.start();
  22. t2.start();
  23. t3.start();
  24. }
  25. }

结果:

Thread-0 卖票:ticket10

Thread-2 卖票:ticket10

Thread-1 卖票:ticket10

Thread本身是一个类,然后它实现了Runnable接口,因此在使用Thread时我们只需要继承Thread并重写它的run()方法就好。

Thread示例:

  1. public class NewThread extends Thread{
  2. private int ticket=10;
  3. public void run()
  4. {
  5. for(int i=0;i<20;i++)
  6. {
  7. if(this.ticket>0)
  8. {
  9. System.out.println(this.getName()+" 卖票:ticket"+this.ticket--);
  10. }
  11. }
  12. }
  13. }
  14. public class Hello {
  15. public static void main(String [] agrs)
  16. {
  17. NewThread t1=new NewThread();
  18. NewThread t2=new NewThread();
  19. NewThread t3=new NewThread();
  20. t1.start();
  21. t2.start();
  22. t3.start();
  23. }
  24. }

运行结果:

Thread-0 卖票:ticket10

Thread-0 卖票:ticket9

Thread-0 卖票:ticket8

Thread-0 卖票:ticket7

Thread-0 卖票:ticket6

Thread-0 卖票:ticket5

Thread-0 卖票:ticket4

Thread-0 卖票:ticket3

Thread-0 卖票:ticket2

Thread-2 卖票:ticket10

Thread-2 卖票:ticket9

Thread-2 卖票:ticket8

Thread-2 卖票:ticket7

Thread-2 卖票:ticket6

Thread-2 卖票:ticket5

Thread-2 卖票:ticket4

Thread-2 卖票:ticket3

Thread-2 卖票:ticket2

Thread-2 卖票:ticket1

Thread-1 卖票:ticket10

Thread-1 卖票:ticket9

Thread-1 卖票:ticket8

Thread-1 卖票:ticket7

Thread-1 卖票:ticket6

Thread-1 卖票:ticket5

Thread-1 卖票:ticket4

Thread-1 卖票:ticket3

Thread-1 卖票:ticket2

Thread-1 卖票:ticket1

Thread-0 卖票:ticket1

发表评论

表情:
评论列表 (有 0 条评论,380人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ThreadRunnable的区别

    我想大家都知道,创建线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,但是要你说出他们的区别,你可能会含糊不清,今天我们通过代码层次来看看区别有哪些!

    相关 ThreadRunnable的区别

    如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。 总结: 实现Runnable接口比继承Thread类所具有的