Java 7:线程重用?(断开 - 重新连接)

6
线程号(id)在线程终止并创建新线程时递增。Java 7只是喜欢递增数字,还是我做错了什么?
我正在使用Java 7构建一个服务应用程序,当连接建立时创建一个新线程并为连接提供服务。当服务接收到关闭消息时,它会退出循环并允许线程中的代码完成。因此,线程的生命周期应该已经终止,就像任何实例对象一样。Java 7不使用Thread.stop()或Thread.destroy()等方法。(自v5以来就不再使用了,我想。)
我有一个带有“打开连接”,“关闭连接”和“发送消息”按钮的界面,并在线程中对应地打印出println语句,以便我可以看到发生了什么。我打印出的变量之一是Thread.currentThread()。当我打开第一个连接时,currentThread()是Thread[Thread-0,5,main]。我关闭连接并获得了一条消息,指示Thread[Thread-0,5,main]正在终止。
好的,现在回到原点了,对吧?没有线程了。
我点击连接按钮,然后输入Thread[Thread-1,5,main]。看到了吗?现在是“Thread-1”,而不是“Thread-0”。每次这样做,数字都会增加1。
(顺便问一下,如果不麻烦的话,“5,main”是什么意思?)
关于线程停止的评论:为什么Thread.stop、Thread.suspend和Thread.resume已被弃用?
3个回答

3
您所提到的数字并不是指当前运行的线程数... 线程 "n" 只是一个自动生成的数字,当您没有明确为线程指定名称时使用。每个未命名的 Thread 实例都会将其 n 递增 1。此数字仅用于标识线程实例。
但是,如果您使用线程池,则提交到执行的任务可能在先前用于其他任务的线程中运行。
另外,这与 Java 7 没有特别关系。Java 6 具有完全相同的行为(我还怀疑以前的版本也是如此)。

谢谢。嘿,庆祝一下!我现在有足够的积分可以给你的回答点赞了。你知道"5,main"是什么意思吗? - Roger F. Gay
虽然我认为这意味着线程 ID 将像麦当劳卖出的汉堡数量一样。希望他们至少使用 BigInteger。 - Roger F. Gay
我怀疑“5,main”后缀必须是创建(或维护)线程的人添加的。 - bruno conde

2

线程-0,5,主要

0 : ID

5 : 优先级

主要 : 名称

线程ID是long类型的;如果我们每秒创建一百万个线程,在300,000年后,ID将会溢出。


0

线程编号(ID)在线程终止时递增

是的。

并创建一个新线程。

是的。


谢谢您的澄清。我意识到在撰写问题时没有考虑到那个方面。 - Roger F. Gay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接