前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >currentThread()方法可返回代码段正在被哪个线程调用的信息

currentThread()方法可返回代码段正在被哪个线程调用的信息

原创
作者头像
用户7365393
修改2021-10-08 14:59:09
修改2021-10-08 14:59:09
62800
代码可运行
举报
运行总次数:0
代码可运行

currentThread()方法

  currentThread()方法可返回代码段正在被哪个线程调用的信息。首先给出一个正常的例子:

代码语言:javascript
代码运行次数:0
运行
复制
public class CountOperate extends Thread {
	public CountOperate() {
		System.out.println("CountOperate---begin");
		System.out.println("Thread.currentThread().getName()="
				+ Thread.currentThread().getName());
		System.out.println("this.getName()=" + this.getName());
		System.out.println("CountOperate---end");
	}

	@Override
	public void run() {
		System.out.println("run---begin");
		System.out.println("Thread.currentThread().getName()="
				+ Thread.currentThread().getName());
		System.out.println("this.getName()=" + this.getName());
		System.out.println("run---end");
	}
}
代码语言:javascript
代码运行次数:0
运行
复制
public class Run {
	public static void main(String[] args) {
		CountOperate c = new CountOperate();
		c.setName("A");
		c.start();
	}
}

输出:

代码语言:javascript
代码运行次数:0
运行
复制
CountOperate---begin
Thread.currentThread().getName()=main
this.getName()=Thread-0
CountOperate---end
run---begin
Thread.currentThread().getName()=A
this.getName()=A
run---end

  我们解释一下,首先输出Thread.currentThread().getName()=main很正常,实例化MyThread类,调用MyThread构造方法是主线程main。输出this.getName()=Thread-0,在这里this是MyThread的引用,是个线程类,但是这个线程类并没有设置名字,所以Thread默认给了一个Thread-0,默认名字的规则定义如下:

之后是run()中的代码结果,当前线程名字为A,A是我们手动赋予的c.setName("A");,并且它是运行着的。但如果将Run类换成:

代码语言:javascript
代码运行次数:0
运行
复制
public class Run {
	public static void main(String[] args) {
		CountOperate c = new CountOperate();
		Thread t1 = new Thread(c);
		t1.setName("A");
		t1.start();
	}
}

将输出:

代码语言:javascript
代码运行次数:0
运行
复制
CountOperate---begin
Thread.currentThread().getName()=main
this.getName()=Thread-0
CountOperate---end
run---begin
Thread.currentThread().getName()=A
this.getName()=Thread-0
run---end

  这里将线程对象以构造参数的方式传递给Thread对象进行start()启动线程 。 run()方法前的代码没什么好说的。在run()中的代码结果表示,this 与 Thread.currentThread()不是同一个引用。将线程对象以构造参数的方式传递给Thread对象进行start()启动线程,我们直接启动的线程实际是newThread(即t1),而作为构造参数的c线程对象,赋给Thread类中的属性target,之后在Thread的run方法中调用target.run(); 此时Thread.currentThread()是Thread的引用newThread, 而this依旧是c的引用,所以是不一样的,打印的内容也不一样。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • currentThread()方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档