JAVA线程命名不成功

问题描述

利用构造函数,给线程起名字,但是事实证明没有起到作用。线程的名字还是默认的Thread-n。publicclassTestJoin{publicstaticvoidmain(String[]args){PrimeRunrunner=newPrimeRun();Threadthread=newThread(runner,"Bumble");thread.start();}}classPrimeRunextendsThreadimplementsRunnable{publicvoidrun(){System.out.println(getName());}}

解决方案

解决方案二:
命名是成功了,你输出错了而已。classPrimeRunextendsThreadimplementsRunnable{publicvoidrun(){System.out.println(getName());}}改为classPrimeRunextendsThread{@Overridepublicvoidrun(){System.out.println(Thread.currentThread().getName());}}就行了。你原来的代码输出的是main方法里的runner的name,不是thread的name。
解决方案三:
thread.getName()试试,应该就很明显了
解决方案四:
引用楼主root1lxd的回复:

利用构造函数,给线程起名字,但是事实证明没有起到作用。线程的名字还是默认的Thread-n。publicclassTestJoin{publicstaticvoidmain(String[]args){PrimeRunrunner=newPrimeRun();Threadthread=newThread(runner,"Bumble");thread.start();}}classPrimeRunextendsThreadimplementsRunnable{publicvoidrun(){System.out.println(getName());}}

您好!感谢您的回复。这样的输出确实是Bumble。但是我还是有一些疑惑,希望您可以指点我一下。1.该run()方法在程序中,是不是有可能被别的线程调用,比如您提到的main方法。这样才导致了输出Thread-0。2.就算是main线程先调用了run方法,那么等main线程让出CPU之后,thread线程去调用,怎么没有输出呢。3.您这样修改结果是正确的,但是我不是很理解。您看能不能麻烦您帮我说下两个线程的执行过程呢。我刚开始学java,所以基础的东西还不是很熟悉。希望得到您的指导。不胜感激。
解决方案五:
引用2楼dzq584462393的回复:

thread.getName()试试,应该就很明显了

您好,谢谢您的回复。您这样修改的话,编译通不过~
解决方案六:
--你的输出结果不关线程的问题按我自己的个人理解就是首先,Thread对象执行start()方法后,会启动一个线程然后调用该Thread对象的run()方法。然后Thread类的run()方法的源码是这样的@Overridepublicvoidrun(){if(target!=null){target.run();}}这里的target是Thread类的成员变量而你的代码里PrimeRunrunner=newPrimeRun();Threadthread=newThread(runner,"Bumble");//这一句里会把runner赋值给thread的成员变量targetthread.start();//注意!!这里会启动一个线程,然后那个线程会调用thread.run()--然后自己再看下上面Thread类的run()方法的源码
解决方案七:
用这个Thread.currentThread().getName()
解决方案八:
该回复于2014-09-22 08:47:50被版主删除
解决方案九:
引用楼主root1lxd的回复:

利用构造函数,给线程起名字,但是事实证明没有起到作用。线程的名字还是默认的Thread-n。publicclassTestJoin{publicstaticvoidmain(String[]args){PrimeRunrunner=newPrimeRun();Threadthread=newThread(runner,"Bumble");thread.start();}}classPrimeRunextendsThreadimplementsRunnable{publicvoidrun(){System.out.println(getName());}}

你用的getName()是Thread的想打印你的线程的名称,使用Thread.currentThread().getName()

时间: 2024-10-27 13:28:14

JAVA线程命名不成功的相关文章

Java线程模型缺陷研究

Java 编程语言的线程模型可能是此语言中最薄弱的部分.它完全不适合实际复杂程序的要求,而且也完全不是面向对象的.本文建议对 Java 语言进行重大修改和补充,以解决这些问题. Java 语言的线程模型是此语言的一个最难另人满意的部分.尽管 Java 语言本身就支持线程编程是件好事,但是它对线程的语法和类包的支持太少,只能适用于极小型的应用环境. 关于 Java 线程编程的大多数书籍都长篇累牍地指出了 Java 线程模型的缺陷,并提供了解决这些问题的急救包(Band-Aid/邦迪创可贴)类库.我

Java线程的深入探讨

一般来说,我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其 称为程序(Program).所谓"线程"(Thread),是"进程"中某个单一顺序的控制流. 新兴的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线 程视为基本执行单位.线程也是Java中的相当重要的组成部分之一. 甚至最简单的Applet也是由多个线程来完成的.在Java中,任何一个Applet的 paint()和upd

Java线程:新特征-锁(上)

在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在 java.util.concurrent.locks 包下面,里面有三个重要的接口Condition.Lock.ReadWriteLock. Condition Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-se

Java线程:新特征-锁(下)

Java中读写锁有个接口java.util.concurrent.locks.ReadWriteLock,也有具体的实现ReentrantReadWriteLock,详细的API可以查看JavaAPI文档. 下面这个例子是在文例子的基础上,将普通锁改为读写锁,并添加账户余额查询的功能,代码如下: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.

Java线程:新特征-信号量

因此,本人认为,这个信号量类如果能返回数目,还能知道哪些对象在等待,哪些资源可使用,就非常完美了,仅仅拿到这些概括性的数字,对精确控制意义不是很大.目前还没想到更好的用法. 下面是一个简单例子: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; /** * Java线程:新特征-信号量 * * @aut

聊聊并发(三)Java线程池的分析和使用

作者:方腾飞 原文发表于infoQ:http://www.infoq.com/cn/articles/java-threadPool 1.    引言 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要的等到线程创建就能立即执行.第三:提高线程的可管理性.线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控.但是要做到合理的利用线

Java线程池的理论与实践

前段时间公司里有个项目需要进行重构,目标是提高吞吐量和可用性,在这个过程中对原有的线程模型和处理逻辑进行了修改,发现有很多基础的多线程的知识已经模糊不清,如底层线程的运行情况.现有的线程池的策略和逻辑.池中线程的健康状况的监控等,这次重新回顾了一下,其中涉及大量java.util.concurrent包中的类.本文将会包含以下内容: Java中的Thread与操作系统中的线程的关系 线程切换的各种开销 ThreadGroup存在的意义 使用线程池减少线程开销 Executor的概念 Thread

学生党如何拿到阿里技术offer: 《2016阿里巴巴校招内推offer之Java研发工程师(成功)》

大学里有这样一句话"现在流的泪,都是当初选专业是脑子进的水",从见闻中了解很多中学非常优秀的同学因为选择了自己不喜欢不感冒的专业,很多人不懂得为自己寻找方向,而是继续延续应试教育下的学习方式,这样,他们的学习便成为了"面向考试"的学习,当他们走出大学校门,往往会发现,自己出了成绩单上的几个数字之外收获甚少.   但其实学习的主动权就在自己手中,你不喜欢自己的专业,但是你可以为自己选择未来的路.在计算机互联网行业,不是科班出身但是取得辉煌成就的人大有人在,问及为什么不

Java线程面试题 Top 50

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会 被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像