Java线程中,Thread和Runnable创建线程的区别
智启佳工作室
做你喜爱的网站

Java线程中,Thread和Runnable创建线程的区别

一、Thread创建线程,通过新建类继承Thread类,重写run方法,然后在main方法中start(),创建并启动线程.

public class MyThread extends Thread{//除了构造方法和私有属性其他的都可以被继承下来    @Override//重写了父类Thread的run方法.//在main方法start()创建并启动线程时,会调用此方法.    public void run(){    System.out.println("子线程的信息:"+Thread.currentThread().toString());}    public MyThread(String name){        super(name);    }}
<!-- wp:code -->
<pre class="wp-block-code"><code>public class Test{    public statci void main(String&#91;] args){        MyThread mt = new MyThread("子线程");        mt.start();//创建并启动线程,并调用MyThread中重写过后的run方法    }}</code></pre>
<!-- /wp:code -->

二、通过实现Runnable接口来创建线程

public class MyRunnable implements Runnable {    @Override    public void run() {        for (int i = 0; i < 20; i++) {            System.out.println(Thread.currentThread().getName()+" "+i);        }    }}
public class ThreadTest{    public static void main(String[] args){        MyRunnable mr = new MyRunnable();        Thread t = new Thread(mr,"测试线程");        t.start();    }}

通过Thread.currentThread().getName()可以查询线程的名称.

三、匿名内部类创建线程

public class AnonymousInnerClassThread {    public static void main(String[] args) {        Runnable r = new Runnable() {            @Override            public void run() {                for (int i = 0; i < 10; i++) {                    System.out.println("Thread: "+i);                }            }        };        new Thread(r).start();        for (int i = 0; i < 20; i++) {            System.out.println("Thread II: "+i);        }    }}

通过创建一个匿名内部类来启动线程。匿名内部类,匿的是类的名字。通过一个匿名的类来implements接口重写其中的run方法。Thread中的构造方法有一个Thread(Runnable target).此时的r就相当于一个匿名类实现的target对象.

Thread和Runnable的区别
A:避免了Java单继承的局限性;
说明:如果使用方式一,那么在Java中一个类只能有一个直接父类,如果一个类已经继承其他的父类,那么当前这
个类中假如有需要多线程操作的代码,这时这个类是无法再继承Thread类的。这样就会导致当前这个类中的某些
需要多线程执行的任务代码就无法被线程去执行。
B:把线程代码和任务的代码分离,解耦合(解除线程代码和任务的代码模块之间的依赖关系)。代码的扩展性非常
好;
说明:Thread类是专门负责描述线程本身的。Thread类可以对线程进行各种各样的操作。如果使用第一种方式,
那么把线程要执行的任务也交给了Thread类。这样就会导致操作线程本身的功能和线程要执行的任务功能严重的
耦合在一起。
但是方式二,自定义一个类来实现Runnable接口,这样就把任务抽取到Runnable接口中,在这个接口中定义线程
需要执行的任务的规则。当需要明确线程的任务时,我们就让这个类实现Runnable接口,只要实现Runnable接口
的类,就相当于明确了线程需要执行的任务。
当一个类实现Runnable接口,就相当于有了线程的任务,可是还没有线程本身这个对象。这时我们就可以直接使
用Thread这个类创建出线程,然后把任务交给线程。这样就达到任务和线程的分离以及结合。

赞(0) 打赏
未经允许不得转载:梦想未来 » Java线程中,Thread和Runnable创建线程的区别
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

--