传统线程技术(一)

传统线程技术(一)

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

一. 传统线程创建方法

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


相关推荐

  • mysql secure file priv(private)

    1290–TheMySQLserverisrunningwiththe–secure-file-privoptionsoitcannotexecutethisstatementsecure-file-priv特性secure-file-priv参数是用来限制LOADDATA,SELECT…OUTFILE,andLOAD_FILE()传到哪个指定…

    2022年4月15日
    47
  • ctk编译linux,CTK插件框架学习5-插件间通信(Netlink实现热拔插监控)[通俗易懂]

    ctk编译linux,CTK插件框架学习5-插件间通信(Netlink实现热拔插监控)[通俗易懂]本章来写一个插件,插件功能为通过NETLINK读取linux系统中的hotplug信息,比如usb、SD卡、磁盘等设备的插拔事件产生的信息,将读到的信息通过插件间通信的方式发出。1.eventadmin库编译CTKPluginFramework下插件间通信是通过事件管理机制实现的,其代码位于CTK/Libs/PluginFramework/service/event目录下,使能事件管理机制,…

    2022年5月29日
    48
  • 千分位的写法_千分位格式

    千分位的写法_千分位格式之前看到一道面试题,要求使用js写千分位,当时面试时有点懵逼,但是后来参考网上的写法与自己的思考,写出了千分位。以下是通过网上的代码,本人进行了进一步优化后的代码,仅供参考。相比较与网上的方法,我

    2022年8月2日
    7
  • PyCharm自动补全如何不区分大小写。

    PyCharm自动补全如何不区分大小写。举个例子 输入 fal 能够提示 False 默认是没有这个的 只能且换成大写 F 修改方法 打开 file setting editer general codecompleti 然后右边就会看到 Matchcase 可以取消选择

    2026年3月18日
    2
  • 优化SqlServer–数据压缩

    优化SqlServer–数据压缩

    2021年11月25日
    41
  • anycast RP「建议收藏」

    anycast RP「建议收藏」动态RP尽管较静态RP有一定的优点,但依旧存在缺陷,当选定了RP后,所有的流量仅仅依靠这一个RP转发组播数据流量,不能实现流量负载功能。anycastRP场景:为了增强PIM-SM中RP节点的可靠性,以及对网络中的组播流量进行分担,可在网络中选取若干RP点,运行AnycastRP,达到冗余备份,负载分担的目的。原理:多个RP配置一个相同的AnycastRP地址…

    2022年5月24日
    45

发表回复

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

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