为了账号安全,请及时绑定邮箱和手机立即绑定

Java:将线程添加到线程池后,为何无法获取自定义的线程名称?

Java:将线程添加到线程池后,为何无法获取自定义的线程名称?

扬帆大鱼 2019-02-16 03:10:48
public class MyRunnable implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName()); } } public class Client { public static void main(String[] args) { Runnable r = new MyRunnable(); Thread t = new Thread(r, "Demo"); ExecutorService service = Executors.newFixedThreadPool(2); service.submit(t); service.shutdown(); } } 输出结果为: pool-1-thread-1 预期结果为: Demo 这是为什么呢?
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

ExecutorService.submit接受的是Runnable接口的实现,而不是Thread,线程池拿到Runnable接口的实现之后,只关心一个run方法,并且也只会调用它。
至于你拿到的线程名,是线程池生成时已经生成的(newFixedThreadPool时),和你submit的那个t无关

去阅读下Threadrun方法和AbstractExecutorServicesubmit方法的代码应该对你理解有所帮助

如果你真的有对线程名有要求,应该在线程内部改(也就是Runaablerun方法内),这样获取到的线程才是当前线程
(当然每次你都要取一次以确认,因为没法确保下次还是同一个线程运行这个Runnable

查看完整回答
反对 回复 2019-03-01
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

service.submit(t);
这行代码是错的,ExecutorService并没有submit(Thread t)这个方法

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 1263 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号