Java线程总结(一):创建线程的两种方式Thread和Runnable
2016-09-07 21:02
633 查看
实现线程的方式有两种:一种是继承Thread类,一种是实现Runnable接口。
首先看下两种实现方式,然后简单讨论下这两种方式执行原理?
从源码可以看到Thread实现了Runnable接口,方式二在new Thread时传入了一个Runnable对象(赋给target),Thread的run方法就是调用Runnable的run方法,所以启动线程时就执行了Runnable对象的run方法。
方式一Thread的子类覆盖了run方法,启动线程时就直接执行子类自己的run方法。
这两种创建方式没有说哪一种更好,在不同场景下选择合适的方式就行,但实现Runnable接口的方式用的更多。
了解了两种方式运行的原理后,就很容易分析下面的代码怎么执行的了
子类run方法实际就是覆盖父类中的run方法,如果覆盖了就用子类的run方法,不会再找Runnable中的run方法了,所以运行的是子类中的run方法。
首先看下两种实现方式,然后简单讨论下这两种方式执行原理?
第一种方式:继承Thread
package ydj; public class ThreadDemo { public static void main(String[] args) { Thread thread1 = new MyThread1(); thread1.start();//启动线程 } } class MyThread1 extends Thread{ //覆盖父类run方法 public void run() { while (true) { System.out.println("Thread--1:" + Thread.currentThread().getName()); try{// run方法中的异常不可抛出,只能try Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
第二种方式:实现Runnable接口
package ydj; public class ThreadDemo2 { public static void main(String[] args) { Thread thread2 = new Thread(new MyThread2()); thread2.start();//启动线程 } } class MyThread2 implements Runnable{ //实现run方法 @Override public void run() { while (true) { System.out.println("Thread--2:" + Thread.currentThread().getName()); try{// run方法中的异常不可抛出,只能try Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
两种方式执行原理
从源码可以看到Thread实现了Runnable接口,方式二在new Thread时传入了一个Runnable对象(赋给target),Thread的run方法就是调用Runnable的run方法,所以启动线程时就执行了Runnable对象的run方法。
方式一Thread的子类覆盖了run方法,启动线程时就直接执行子类自己的run方法。
这两种创建方式没有说哪一种更好,在不同场景下选择合适的方式就行,但实现Runnable接口的方式用的更多。
了解了两种方式运行的原理后,就很容易分析下面的代码怎么执行的了
new Thread(new Runnable() {//传入实现Runnable接口对象 @Override public void run() { System.out.println("runnable"); } }){ @Override public void run() {//覆盖run方法 System.out.println("thread"); } }.start();
子类run方法实际就是覆盖父类中的run方法,如果覆盖了就用子类的run方法,不会再找Runnable中的run方法了,所以运行的是子类中的run方法。
相关文章推荐
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- 创建线程的两种方式比较Thread VS Runnable
- java多线程总结一: 线程的两种创建方式及优劣比较
- 线程 创建和启动线程的两种方式 实现Runnable接口 继承Thread类 重写唯一方法run()
- java多线程总结一: 线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java多线程总结一:线程的两种创建方式及优劣比较
- Java中继承Thread和实现Runnable这两种创建线程有何区别
- Java中继承Thread和实现Runnable这两种创建线程有何区别
- java多线程总结一:线程的两种创建方式及比较
- java 多线程(一)---创建线程的三种方式Thread,Runnable,Callable与Future
- java多线程总结一: 线程的两种创建方式及优劣比较
- Java多线程总结(一):Java两种创建线程方式的比较
- 创建线程的两种方式:继承Thread类和实现Runnable接口
- java多线程总结一:线程的两种创建方式及优劣比较