温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java创建线程的两种方法区别

发布时间:2020-10-05 17:47:36 来源:脚本之家 阅读:165 作者:kma 栏目:编程语言

在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口。

下面通过两个例子来分析两者的区别:

1)继承Thread类

public class TestThread extends Thread {
  int count = 3;

  public TestThread(String ThreadName) {
    super(ThreadName);
  }

  @Override
  public void run() {
    for (int i = 0; i < 10; i++)
      if (count > 0) {
        System.out.println(Thread.currentThread().getName() + "--->" + count);
        count--;
      }
  }

  public static void main(String[] args) {
    //new三个线程并启动
    new TestThread("线程一").start();
    new TestThread("线程二").start();
    new TestThread("线程三").start();
  }
}

输出结果:

线程一--->3
线程一--->2
线程一--->1
线程二--->3
线程二--->2
线程二--->1
线程三--->3
线程三--->2
线程三--->1

2)实现Runnable接口

同样跟继承Thread的代码:

public class TestThread implements Runnable {
  int count = 3;

  public TestThread() {
  }

  @Override
  public void run() {
    for (int i = 0; i < 10; i++)
      if (count > 0) {
        System.out.println(Thread.currentThread().getName() + "--->" + count);
        count--;
      }
  }

  public static void main(String[] args) {
    TestThread tr = new TestThread();
    //new三个线程并启动同一个Runnable
    new Thread(tr, "线程一").start();
    new Thread(tr, "线程二").start();
    new Thread(tr, "线程三").start();
  }
}

输出结果:

线程一--->3
线程一--->2
线程一--->1 

可以发现两种新建线程的方式最后的输出结果不一样,是因为在继承Thread类中,同时创建了三个线程,每个线程都执行一个任务,相当于三个线程分别各自进行三次循环打印log;而在第二种实现Runnable接口中是创建三个Thread共同去执行tr这个Runnable,相当于三个Thread共同去执行这一个循环,使得最后count只循环了一次,剩余线程二和线程三都因为使用同一个count导致未能打印出来。

结论:

1)两种创建线程的实现方式不一样,一个通过继承一个通过实现接口,在Java中如果已经继承了其他的父类,那么只能实现接口来创建线程。

2)通过上面的例子可以看到继承Thread,每个线程都独立拥有一个对象,而实现Runnable对象,多个线程共享一个Runnable实例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI