[多线程]多线程(Thread、Runnable、Callable)

1、继承Thread类,重写run方法

  线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。

  每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

2、实现Runnable接口,实现run()方法

  Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。

  设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。

  此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。

3、实现Callable接口,实现call()方法

  返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。

  Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。

继承Thread类实现的特点

  单继承原因,因为线程已经继承Thread类,所以不可以再继承其他类;

  因每个线程都是Thread子类实例,因此可以将多条线的执行流代码与业务数据分离;

  如果需要访问当前线程,直接使用this即可。

实现Runnable接口和Callable接口特点

  线程类只是实现了Runnable接口或Callable接口,还可以继承其他类和实现其他接口。

  资源共享,在这种方式下,多个线程可以共享一个target对象,所以非常适合多个线程来处理同一份资源情况。

  如果需要访问当前线程,需要使用Thread.currentThread方法。

  Callable接口与Runnable接口相比,只是Callable接口call()方法可以返回值和声明抛出异常,前者为实现call()方法后者为实现run()方法。

原文地址:https://www.cnblogs.com/boazy/p/6753049.html