概述

  多线程的创建常用的有两种方法:1). 继承 Thread 类; 2). 实现 Runnable 接口; 3). 实现 Callable 接口。

继承 Thread 类】  

/**
* 1. 继承 Thread 类, 并重写 run() 方法
* 2. 使用 Thread 类的 start() 启动线程
*/
public class Main {
public static void main(String[] args) {
new ThreadClass().start();
new ThreadClass().start();
}
} class ThreadClass extends Thread {
     @Override
public void run(){
System.out.println(Thread.currentThread().getName());
}
}

实现 Runnable 接口

/**
* 1. 实现 Runnable 接口, 并重写 run() 方法
* 2. 使用 Thread 类的 start() 启动线程
*/
public class Main {
public static void main(String[] args) {
ThreadClass obj = new ThreadClass();
new Thread(obj).start();
new Thread(obj).start();
}
} class ThreadClass implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}

实现 Callable 接口

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask; /**
* 1. 实现 Callable 接口, 并重写 call() 方法
* 2. 创建 FutureTask 对象
* 3. 使用 Thread 类的 start() 启动线程
*/
public class Main {
public static void main(String[] args) {
ThreadClass obj = new ThreadClass();
FutureTask<Boolean> result = new FutureTask<Boolean>(obj);
new Thread(result).start();
}
} class ThreadClass implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
return true;
}
}

区别

  1. Java 对于类是单继承,继承 Thread 类会导致该类无法继承其他类,若一个子类需要实现多线程,则不适合使用继承 Thread 类的线程实现方式;Java 对于接口是多继承, 实现 Runnable 接口的方式可以解决子类实现多线程的问题。

  2. 实现 Runnable 接口的方式的可以共享实例数据,即多个不同的线程执行是同一实例的 run() 方法,  而继承 Thread 类不可以共享实例变量,多个不同线程执行的是不同实例的 run() 方法。

  3. 实现 Callable 接口的底层实现也是基于实现 Runnable 接口的 run() 方法,经过封装后可以返回线程执行的结果,可以自定义返回类型。

最新文章

  1. Atom编辑器的插件
  2. JavaSE基础第四篇
  3. jQuery的.html(),.text()和.val()的概述及使用
  4. MC700 安装双系统
  5. C#导出excel
  6. LeetCode &quot;Valid Perfect Square&quot;
  7. 管理Sass项目文件结构
  8. &lt;&lt;java 并发编程&gt;&gt;第七章:取消和关闭
  9. some knowledge t
  10. 局部权重线性回归(Locally weighted linear regression)
  11. python中顺序查找分析和实现
  12. mysql批量插入语句执行失败的话,是部分失败还是全部失败
  13. July 11th, 2018. Wednesday, Week 28th.
  14. Web Workers 简介
  15. 【转载】linux系统时间自动同步:ntp
  16. JavaScript: Constructor and Object Oriented Programming
  17. PAT 1036 跟奥巴马一起编程
  18. Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目
  19. C++实用整数快速输入输出模板(C++)
  20. php版本CKFinder3.4.4自定义上传文件位置

热门文章

  1. MySql LOAD DATA 使用
  2. 摘抄 - linux 目录结构简介
  3. tomcat 配置图片虚拟路径不起作用解决办法
  4. Tensor Operation
  5. 原生JavaScript之深度克隆
  6. ACMer需要的 java基本知识
  7. ACM数论-求组合数
  8. Triangular Pastures POJ - 1948
  9. 加密解密(3)Bob到CA申请证书过程
  10. for循环的阶乘