线程创建的两种方法

在java平台中创建一个线程就是创建一Thread类(或其子类)的实例。

run()方法:线程的任务处理逻辑可以致在Thread类run方法中直接实现或者通过该方法进行调用,因此相当于线程任务处理逻辑的入口方法,他由java虚拟机在运行相应线程是直接调用,而不是由应用代码进行调用。

线程启动:线程的启动调用start()方法,请求Java虚拟机运行相应的线程,而进程具体何时运行是线程调度器(Scheduler)决定的。因此start()方法调用结束并不意味着相应线程已经开始运行。

创建线程的两种方法

Thread类的两个常用构造器:Thread()和Thread(Runnable target),相应的创建线程方式有两种。

  • 第一种:定义Thread子类,在改子类中重写run方法并在该方法中直接实现线程的逻辑。
  • 第二种:创建一个java.land.Runable接口的实例,在Runble实例中实现任务逻辑,然后以该Runable接口的实例作为构造器参数直接创建(new)一个Thread类实例。

继承Thread方式创建线程:

//定义Thread子类方式创建线程
public class WelcomeApp {
  public static void main(String[] args) {
    // 创建线程
    Thread welcomeThread = new WelcomeThread();
    // 启动线程
    welcomeThread.start();
    // 输出“当前线程”的线程名称
    System.out.printf("1.Welcome! I'm %s.%n", Thread.currentThread().getName());
  }
}

// 定义Thread类的子类
class WelcomeThread extends Thread {
  // 在该方法中实现线程的任务处理逻辑
  @Override
  public void run() {
    System.out.printf("2.Welcome! I'm %s.%n", Thread.currentThread().getName());
  }
}

实现Runnable接口方式创建线程:

public class WelcomeApp1 {
  public static void main(String[] args) {
    // 创建线程
    Thread welcomeThread = new Thread(new WelcomeTask());

    // 启动线程
    welcomeThread.start();
    // 输出“当前线程”的线程名称
    System.out.printf("1.Welcome! I'm %s.%n", Thread.currentThread().getName());
  }
}

class WelcomeTask implements Runnable {
  // 在该方法中实现线程的任务处理逻辑
  @Override
  public void run() {
    // 输出“当前线程”的线程名称
    System.out.printf("2.Welcome! I'm %s.%n", Thread.currentThread().getName());
  }
}

一旦线程run方法执行(由java虚拟机调研)结束,相应的线程也就结束。当然run方法执行结束包括:正常结束、抛出异常终止。运行结束的线程所占的资源会如同其他java对象一样被java虚拟机回收。

线程属于一次性用品,不能重复调用,start方法只能调用一次,否则会抛出illegalThreadStateException

两种创建线程方法区别:

  1. 基于继承技术,创建Thread的子类
  2. 已Runnable接口实例为构造器参数,直接通过new创建线程实例,是一种基于组合的技术。

组合向相对于继承来说类的耦合性更低,更加灵活,所以优选组合技术。

转载于:https://www.cnblogs.com/sanzashu/p/11058630.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值