摘要:

其实两种方法归结起来看还是一种,都是利用Thread的构造器进行创建,区别就是一种是无参的,一种是有参的。

一、继承Thread线程类:

通过继承Thread类,重写run方法,子类对象就可以调用start方法启动线程,JVM就会调用此线程的run方法。

代码如下:

public class MyThread extends Thread {

public MyThread() {

super();

}

@Override

public void run() {

}

// 线程执行结束

System.out.println("执行完成! " + getName());

}

}

public class HelloWorld {

public static void main(String[] args) {

// 创建线程t1

Thread t1 = new MyThread(); ①

// 开始线程t1

t1.start();

}

}

注意: 如果直接调用run方法,程序只会按照顺序执行主线程这一个线程。不会创建一个线程。

public class HelloWorld {

public static void main(String[] args) {

// 创建线程t1

Thread t1 = new MyThread(); ①

// 开始线程t1

t1.run();

}

}

二、实现Runnable接口:

因为Thread类实现了Runnable接口,我们可以直接实现Runnable,然后通过Thread(Runnable target)来创建线程。

//线程执行对象

public class Runner implements Runnable {

// 编写执行线程代码

@Override

public void run() {

}

// 线程执行结束

System.out.println("执行完成! " + Thread.currentThread().getName());

}

}

public class HelloWorld {

public static void main(String[] args) {

// 创建线程t1,参数是一个线程执行对象Runner

Thread t1 = new Thread(new Runner());

// 开始线程t1

t1.start();

}

}

注意: (1)实现Runnable接口,就不能调用Thread类的方法了,但是可以通过Thread.currentThread()进行调用。

(2)可能有的人很好奇,thread.start();为什么调用我们实现Runnable类的run方法,而不是Thread类的run方法。这就要从源码分析了:

//Thread的run方法,调用target.run()

public void run() {

if (target != null) {

target.run();

}

}

//Thread的构造器

public Thread(Runnable target) {

init(null, target, "Thread-" + nextThreadNum(), 0);

}

Thread类的构造器会调用init方法,会把我们传过去的Runnable对象赋值给Thread类的target,所以target.run()就是我们实现Runnable类,调用重写的run方法。

private Runnable target;

二、比较创建线程的两种方法:

开发中:优先选择,实现Runnable接口的方式

原因:(1)实现的方式没有类的单继承的局限性

(2)实现的方式更适合来处理多个线程共享数据的情况。

联系: Thread实现了Runnable

相同点: 两者都需要重写run()。

总结:两种方法各有好坏,所谓萝卜青菜各有所爱,除了自身喜好,别忘了实际的应用场景。(◔◡◔)

java怎么创建子线程_Java创建子线程的两种方法相关推荐

  1. java中集合的排序_Java中集合排序的两种方法

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...

  2. java 判断数的位数_Java判断数字位数的两种方法

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 普通方法: import java.util.Scanner; public class Digits { pub ...

  3. java多线程同步的四种方法_java中实现多线程的两种方法

    java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...

  4. 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )

    文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...

  5. JAVA:线程总结及多线程实现的两种方法

    JAVA:线程总结 目录 目录 JAVA:线程总结 JAVA:线程总结 01_多线程(多线程的引入)(了解) 02_多线程(多线程并行和并发的区别)(了解) 03_多线程(Java程序运行原理和JVM ...

  6. Java两个线程交替打印奇偶数(两种方法对比)

    简介 本文将承接文章<Java多线程wait()和notify()系列方法使用教程>,我们将通过"两个线程交替打印100内的奇偶数",来展示下wait()方法和noti ...

  7. java list转set去重_Java中List去重的四种方法

    Java中List去重的四种方法 package com.lxz.test; import java.util.ArrayList; import java.util.HashSet; import ...

  8. java new class 直接调用_java中创建对象的的两种方式具体解释,一个是new一个是调用Class类的newinstance方法?...

    展开全部 1.new 使用java的关键字new来创建对象实例.构造函数链中的所有构造函数都32313133353236313431303231363533e78988e69d833133333739 ...

  9. java web登录状态保持_java web用于保持状态的4种方法

    方法一:网址重写 通过在url地址后面添加若干的token作为查询字符串来实现.token的值一般为 键=值 url?key1=value1&key2=value2&...&k ...

  10. java 计算π_Java实现计算圆周率π的两种方法 - 博客频道 - CSDN.NET

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 博主的思路是: 1.首先对服务器发送http请求. 2 ...

最新文章

  1. 投票 | RONG奖学金最佳人气奖评选活动开始啦!
  2. iframe跨域自适应高度
  3. plsql 记录型变量
  4. python 字符串函数总结
  5. 任正非:不向美国人民学习他们的伟大,就永远战胜不了美国
  6. vue----sourceMap
  7. java 并发queue_深入浅出 Java Concurrency (19): 并发容器 part 4 并发队列与Queue简介
  8. locate命令详解
  9. 博科300 java配置,博科300 光纤交换机如何设置为SSH登录?
  10. 编译x86_64老是不过,iphone模拟器debug不了解决方法
  11. 观光公交削弱_削弱Web开发人员和Internet的7大障碍
  12. formality形式验证里的案件分析
  13. Python+pywin32批量读取带密码的Excel文件数据导出为CSV文件
  14. 移动互联网十年,谁主沉浮?
  15. 【福慧双修-这是不是最短路?】
  16. 关闭Windows Defender实时保护解决下载激活软件报检测到病毒无法下载的问题
  17. ArcMap或ArcScene恢复初始化界面设置---彻底解决各种窗口隐藏问题
  18. 国产Excel开发组件Spire.XLS【转换】教程(9):C# 中 Excel 97-2003 和 Excel 2007 之间的转换
  19. JavaEE 从入门到放弃(一):Java EE 是个什么东西
  20. 手写基于Spring Cloud的TCC分布式事务框架

热门文章

  1. sublime text3快捷键
  2. Struts2 最新高危漏洞详解
  3. 监控摄像头是如何追踪的?
  4. MySQL通过binglog日志恢复删除数据
  5. python gil 解决_Python GIL问题
  6. android 蓝牙配对过程,android – 连接到已配对的蓝牙设备
  7. 程序员面试时,怎样跟HR谈薪水
  8. 易烊千玺现场献唱,华为nova 3引爆年轻市场
  9. geth共识替换方法
  10. 对2b、2c账号体系的思考