Java中,通过实现Runnable接口来创建进程时,没有继承Thread类,为啥却可以创建Thread类对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中,通过实现Runnable接口来创建进程时,没有继承Thread类,为啥却可以创建Thread类对象相关的知识,希望对你有一定的参考价值。
class Ticket implements Runnable
private int tick = 100;
Object obj = new Object();
public void run()
while(true)
synchronized(obj)
if(tick > 0)
tryThread.sleep(10);catch (Exception e)
System.out.println(Thread.currentThread().getName()+"...sale:" + tick--);
class TicketDemo
public static void main(String[] args)
Ticket t = new Ticket();
Thread t1 = new Thread(t); //为什么没有继承Thread却可以创建Thread类对象
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
PS:Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口.
在使用Thread的时候只需要new一个实例出来,调用start()方法即可以启动一个线程。
Thread Test = new Thread();
Test.start();
在使用Runnable的时候需要先new一个继承Runnable的实例,之后用子类Thread调用。
Test impelements Runnable
Test t = new Test();
Thread test = new Thread(t);
在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。
实现Runnable接口相比 继承Thread类有如下好处:
->避免点继承的局限,一个类可以继承多个接口。追问
请问为什么在使用Runnable的方法来创建线程的时候。只是实现了Runnable接口,并没有看到Thread类。但却可以创建Thread类对象,比如此处:Thread test = new Thread(t);的test对象。这是为什么呀?
参考技术A 仔细看API里面的介绍:1,进入API找到Thread类里面的start()方法,里面介绍到: 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
2,进入API找到Thread类里面的run()方法,里面介绍到: 如果该线程是使用独立的Runnable 运行对象构造的,则调用该
Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
Java第九天
创建线程的第一种方式:继承Thread类
创建线程的第二种方式:实现Runnable接口
1.定义类实现Runnable接口。
2.覆盖接口中的run方法,将线程的任务代码封装到run方法中。
3.通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类中的构造函数的参数进行传递。
为什么?因为线程的任务都封装在Runnable接口子类对象的run方法中。所以要在线程对象创建时就必须明确要运行的任务。
4.调用线程对象的start方法开启线程。
实现Runnable接口的好处:
1.将线程的任务从线程的子类中分离出来,进行了单独的封装。按照面向对象的思想将任务封装成对象。
2.避免了java单继承的局限性。
以上是关于Java中,通过实现Runnable接口来创建进程时,没有继承Thread类,为啥却可以创建Thread类对象的主要内容,如果未能解决你的问题,请参考以下文章