Java中怎么使用Thread和Runnable创建线程
导读:本文共2646字符,通常情况下阅读需要9分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 一、通过继承Thread创建线程通过继承Thread类,创建一个线程,在主线程中,调用start,让线程处于runnable状态,让系统去运行线程的方法。publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("执行线程");}}pu... ...
目录
(为您整理了一些要点),点击可以直达。一、通过继承Thread创建线程
通过继承Thread类,创建一个线程,在主线程中,调用start,让线程处于runnable状态,让系统去运行线程的方法。
publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("执行线程");}}publicclassThreadTest{publicstaticvoidmain(String[]args){Threadthread=newMyThread();thread.start();}}
二、实现Runnable创建检查
通过实现runnable接口,创建一个线程,需要把runnable的实现类,作为Thread的构造方法的参数,运行这个线程。
publicclassMyThreadimplementsRunnable{@Overridepublicvoidrun(){System.out.println("执行线程");}}publicclassThreadTest{publicstaticvoidmain(String[]args){Runnablethread=newMyThread();Threadthread1=newThread(thread);thread1.start();}}
这里要注意一些,runnable的实现类,是没有start()方法的,只有run()方法
如果运行这个run方法,依然能运行线程的方法,但是,这个方法并不是在新的线程中运行的,而是在主线程中运行的。
publicclassMyThreadimplementsRunnable{@Overridepublicvoidrun(){System.out.println("此方法在:"+Thread.currentThread().getName()+"中运行");}}publicclassThreadTest{publicstaticvoidmain(String[]args){Runnablerun=newMyThread();System.out.println("此方法在:"+Thread.currentThread().getName()+"中执行");run.run();//Threadthread1=newThread(run);//thread1.start();}}
运行结果:
如果把注释打开,run()注释掉,结果如下:
三、比较两种创建方式
3.1、多继承
Java是不支持类的多继承的,但是支持接口的多实现,所以Runnable在使用上更加灵活。
3.2、 数据共享
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
如果线程中有一个成员变量,使用Runnable创建的线程,多个线程之间可以共同访问这个变量,而Thread不可以。
为什么呢?一个Thread创建的线程,每次都是new的一个新的线程对象,线程对象之间的成员变量不共享。而Runnale,可以作为Thread类的参数,可以多创建几个Thread类,把Runnale作为参数,让多个线程一起运行。
publicclassThreadTest{publicstaticvoidmain(String[]args){Runnablerun=newMyThread();Threadthread1=newThread(run);Threadthread2=newThread(run);Threadthread3=newThread(run);thread1.start();thread2.start();thread3.start();}}
3.3、线程池
线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类。
四、源码分析
当我们进入Thread方法,可以看的Thread也实现了Runnable接口
使用Thread肯定也实现了他的run方法。
可以看出,在这个run方法中,如果target不为空,执行target的run方法,那target是什么?
进入后,发现是runnable接口,那它是如何初始化的?突然想起,执行runnable的实现类时,都会把他通过构造函数传递,那来看看构造函数。
继续往下,可以看出确实是在这里初始化的。
所以,Runnbale接口的run方法,是通过Thread的成员变量去执行的。
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Java中怎么使用Thread和Runnable创建线程的详细内容,希望对您有所帮助,信息来源于网络。