前言

本文主要内容

  • 介绍java创建线程的两种方式
  • 比较两种方式的优缺点

    环境

  • win10

  • jdk14

    正文

    概览/比较

    其实这里说创建比较怪,在java这一层,创建线程本质上就一种方式,就是实例化Thread调用start,等待被选中然后run。这里的不同方式主要是针对赋予线程任务方式的不同。可以看到主要是两种方式:1.重写Thread的run方法 2.实现Runnable接口,编写run方法
    image.png
    image.png
    image.png
    这两种方式各有优缺

  • 从面向对象编程的角度看,方式一使用继承,而方式二使用聚合,而聚合是比继承耦合性更低的,就是是说方式二更灵活些

类图如下:
方式一: 线程的使用方式 - 图4方式二: 线程的使用方式 - 图5

  • 从线程安全的角度看,因为方式二是使用聚合,在实例化Thread时传递Runnable接口实现类的对象。这就会使得在不同线程中共享了这个对象,所以需要保证这个对象是线程安全的

    实现Runnable接口

  1. package cn.zjm404.stu.multithreading.create;
  2. public class RunnableImpl implements Runnable{
  3. @Override
  4. public void run() {
  5. System.out.println("Hello World");
  6. }
  7. }
  1. RunnableImpl target1 = new RunnableImpl();
  2. Thread thread = new Thread(target1);
  3. thread.start();

继承Thread类

  1. package cn.zjm404.stu.multithreading.create;
  2. public class ThreadExtends extends Thread{
  3. @Override
  4. public void run() {
  5. System.out.println("Hello World");
  6. }
  7. }
  1. Thread thread3 = new ThreadExtends();
  2. thread3.start();

参考