Java 中的线程创建的方式(二)

导语:

上篇文章中介绍了线程创建的第一种方法,本文主要介绍线程的第二种创建方式,并通过实例带大家理解线程创建的另外一种方法。

线程的创建,启动方式二

线程创建的第二种方法是实现 Runnable 接口
先上代码:

1 public class TestThread001 implements Runnable{//创建了一个普通的类TestThread001,实现Runnable接口,具备争抢资源的能力,即多线程的能力。
2   //实现接口后,就要重写里面的抽象方法 run,run 方法里面的内容就是线程体
3   @Override
4   public void run() {
5       for (int i = 1; i <=10; i++) {
6           System.out.println(i);
7       }   
8   }
9 }
10 public class Test {
11  public static void main(String[] args) {
12      TestThread001 tt=new TestThread001();//创建了一个线程对象。       
13        //tt.start();
14      Thread t=new Thread(tt);
15      t.setName("线程Test--");
16      t.start();
17      for (int i = 1; i <=10; i++) {
18          System.out.println(Thread.currentThread().getName()+i);
19      }
20  }
21 }

现在就来解释一下这段代码:

第 1 至 9 行代码只是表示创建了一个普通的类 TestThread001,然后该类实现了 Runnable 接口,具备了多线程的能力。和第一种方法类似,实现了 Runnable 接口之后也需要重写 run 方法。

第 12 行表示创建了一个线程对象 tt,但此时它只是一个普通的对象而已。此时,如果再执行 tt.start() 语句,你就会发现 tt 根本没有 start() 方法。但是,启动一个线程又必须调用它的 start() 方法。怎么办?

首先我们要知道的是, start() 方法是属于 Thread 类的,所以需要根据 Thread 类创建一个对象 t,调用这个对象的 start() 方法把 tt 线程启动起来。那这个 Thread 对象怎么才能和线程对象联系起来呢?答案就是通过构造器,所以就有了第 14 行代码(我应该表达清楚了吧)。然后第 15 行给线程起名字,第 16 行,调用 t 的 start() 方法启动线程 tt。

这段代码就是线程创建并启动的第二种标准方法,应该不难理解。

这段代码的运行结果如下:


运行结果

这段代码也表明这两个线程在微观上是交替运行的。

那么这两种创建线程的方式哪种好呢?
答案是第二种方法好,即实现 Runnable 方法更好。因为在Java中只能单继承,一个类继承了 Thread 类之后就不能再继承其他的类了,而一个类却可以多实现,实现不同的接口,所以第二种方法比第一种更好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,987评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,493评论 1 15
  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    小徐andorid阅读 2,836评论 3 53
  • 前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)...
    GarfieldEr007阅读 5,374评论 4 22