多线程继承Thread类和实现Runnable接口的区别,java实现runnable接口多线程代码
00-1010我们先来看两个实现的步骤:
公共类thread demo { public static void main(String[]args){ for(int I=0;i5;I) {//创建并启动线程newthread (newmythread(), thread i)。由继承的线程类创建的start();//创建并启动线程newthread (newrunner(), thread i)。通过实现Runnable接口创建的start();} } }//继承Thread类ClassMyThread扩展Thread {//Override run方法@ Override public void run(){ system . out . println(Thread . current Thread()。由继承的线程创建的getname());} }//实现runnable接口ClassRunner实现Runnable {//实现Run方法@ override public void Run(){ system . out . println(thread . current thread()。getname()有一个用Runnable实现创建的接口);}}从上面的代码可以看出,使用Runnable接口创建多线程时,需要将实现类作为参数访问到Thread实例对象中,通过调用Thread对象的start方法来启动。我们来看看Thread的源代码。
//Thread类继承Runnable类的构造函数Public Class Thread实现Runnable {} //Thread并调用init方法Public Thread(Runnable target){ init(null,target, thread-nextthreadnum(),0);}//init调用了静态方法init private void init(线程组g,可运行目标,字符串名称,长栈大小){init (g,目标,名称,栈大小,null,true);}//看静态方法init private void init(线程组g,Runnable target,字符串名,longstack size,accesscontrolcontext ACC,boolean inheritehreadlocales){.//private runnable实例this.target=target.}//再看看Runnable方法@ override public void run(){ if(target!=null){ target . run();}}}从上面追踪源代码的过程可以看出,Thread类实现了runnable接口,而继承Thread类,重写run方法,本质上就是实现Runnable接口的Run方法。
通过以上分析,总结使用线程类和Runnable接口的区别:
通过继承Thread类实现多线程比Runnable更简单。使用Runnable接口需要通过线程重新封装。因为Java不支持多重继承,一个类继承了Thread类之后就不能继承其他类,所以使用Runnable接口实现多线程更加灵活。除了以上两种多线程实现,还可以通过可调用接口实现。我写了一篇关于可调用和可运行接口实现多线程的比较的总结:
使用Runnable和Callable接口实现多线程的区别
关于使用Thread类和Runnable接口实现多线程的区别,本文到此为止。关于线程类和Runnable接口实现多线程的更多信息,请搜索热门IT之前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。