传统线程技术(一)

传统线程技术(一)

大家好,又见面了,我是全栈君。

一. 传统线程创建方法

1. 覆盖Thread子类的run方法中编写详细代码

2. 在传递给Thread的Runnable对象的run方法中编写详细代码

二. 实现代码

public class TraditionalThread {	public static void main(String[] args) {		// 方法1:直接new一个Thread的子类。让子类run方法覆盖父类的run方法		Thread thread1 = new Thread() {			@Override			public void run() {				while (true) {					try {						Thread.sleep(500);						System.out.println(Thread.currentThread().getName());					} catch (InterruptedException e) {						e.printStackTrace();					}				}			}		};		thread1.start();  		// 方法2:给Thread类传一个实现了Runnable接口的类		Thread thread2 = new Thread(new Runnable() {			@Override			public void run() {				while (true) {					try {						Thread.sleep(500);						System.out.println(Thread.currentThread().getName());					} catch (InterruptedException e) {						e.printStackTrace();					}				}			}		});		thread2.start();	}}

小知识:

1. new Thread(){ 

    }   这样的写法事实上是创建了Thread的子类

2. new Thread(new Runnable(){}){

    }   传递给Thread的參数事实上是Runnable的实现类对象

三. 一个典型样例:

请问以下的类是运行Runnable中的run方法还是Thread子类的方法?

public class Test {
	public static void main(String[] args) {
		// 以下的代码将会执行Thread子类的run方法而不会执行runnable中的run方法
		new Thread(new Runnable() {
			@Override
			public void run() {
				while (true) {
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("Runnable:" + Thread.currentThread().getName());
				}
			}
		}) {
			@Override
			public void run() {
				while (true) {
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("Thread:" + Thread.currentThread().getName());
				}
			}
		}.start();
	}
	
	/**
	 * Thread 类中的run方法
	 * private Runnable target;
	 * 
	 * public void run() {
	 *	  if (target != null) {
	 *		  target.run();
	 *	  }
	 * }
	 **/
}

答案是执行Thread子类的run方法。 由于它覆盖了父类的run方法,根本就不会执行到runnable的方法,即target.run()


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116108.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月25日 下午10:00
下一篇 2022年1月25日 下午11:00


相关推荐

  • 我离职了[通俗易懂]

    我离职了[通俗易懂]傻瓜,我们江湖再见

    2022年7月25日
    11
  • redisson和jedis区别_java调用redis集群

    redisson和jedis区别_java调用redis集群Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和Zset(有序集合)。 redis与spring的整合一般分为spring-data-redis整合和jedis整合,先看看两者的区别1、引用的依赖不同:spring-data-redis使用的依赖如下:<depen…

    2025年10月17日
    4
  • 主流前端-后端-数据库总结-后端框架篇

    主流前端-后端-数据库总结-后端框架篇一、传统框架介绍1)Hibernate是一种ORM框架,在Java对象与关系型数据库之间建立某种映射,以实现直接存取Java对象(POJO)。2)ORM框架是一种不同与MVC的另一种思想框架,适用范围也与MVC截然不同。3)需要创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。4)当我们需要相关操…

    2022年5月20日
    57
  • 哈夫曼树(C语言实现)

    哈夫曼树(C语言实现)文章目录哈夫曼树的基本概念哈夫曼树的构建构建思路代码实现哈夫曼编码的生成编码生成思路代码实现完整代码展示以及代码测试哈夫曼树的基本概念在认识哈夫曼树之前 你必须知道以下几个基本术语 1 什么是路径 给定 N 个权值作为 N 个结点 构造一棵二叉树 若该树的带权路径长度达到最小 则称该二叉树为哈夫曼树 也被称为最优二叉树 哈夫曼树的构建构建思路代码实现哈夫曼编码的生成编码生成思路代码实现完整代码展示以及代码测试

    2026年3月19日
    3
  • MySQL if语句的三种用法

    MySQL if语句的三种用法1 IF 表达式 IF expr1 expr2 expr3 如果 expr1 为 TRUE 则 IF 返回值为 expr2 否则返回值为 expr3updates if sex 男 女 男 这是 leetcode 上的一道题 将 salary 表中的性别进行转换 男变女 女变男性别变更 2 IFNULL 语句 IFNULL expr1 expr2 假如 expr1 不为 null 则返回 expr1 否则返回 expr23 IF ELSE 语句 IFsearch con

    2026年3月18日
    3
  • 2020美赛A题解题方法

    2020美赛A题解题方法题目:问题A:向北移动全球海洋温度影响某些海洋生物的栖息地质量。当温度变化太大,它们无法继续繁荣时,这些物种就会迁移到其他更适合它们现在和未来生活和繁殖成功的栖息地。其中一个例子就是美国缅因州的龙虾种群,它们正缓慢地向北迁移到加拿大,那里的海洋温度较低,为它们提供了更合适的栖息地。这种地理种群的转移可能会严重影响依赖海洋生物稳定性的公司的生计。您的团队已被苏格兰北大西洋渔业管理协会聘请为顾问…

    2022年6月1日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号