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

时间:2011-09-02 16:16:34

标签: java multithreading

当线程终止并创建新线程时,线程号(id)递增。 Java 7只是喜欢递增数字还是我做错了什么?

我正在使用Java 7构建一个服务应用程序,它在建立连接时创建一个新线程,然后为连接提供服务。当服务收到关闭消息时,它会退出循环并允许完成线程中的代码。因此,据我所知,线程的生命被终止,就像任何实例对象一样。 Java 7不使用Thread.stop()或Thread.destroy()或任何此类东西。 (我认为不是自v5以来。)

我有一个带有“Open Connection”,“Close Connection”和“Send Message”按钮的界面以及线程中相应的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,主要”是什么意思?)

评论re:线程停止:Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

3 个答案:

答案 0 :(得分:3)

您引用的数字并不代表当前运行的线程数... Thread- “n”只是在您未明确提供名称时使用的自动生成的数字线程。您创建的每个Thread实例都没有名称,它的n会增加1.此数字仅用于标识线程实例。

但是,如果您使用线程池,则您提交执行的任务可能会在之前用于其他任务的线程中运行。

此外,这与Java 7没有什么特别之处.Java 6具有完全相同的行为(我怀疑还有以前的版本)。

答案 1 :(得分:2)

主题-0,5,主

0:id

5:优先级

main:name

线程ID为long;如果我们每秒创建一百万个线程,那么在30万年之后,id就会溢出。

答案 2 :(得分:0)

  

线程终止时线程号(id)递增

没有

  

并创建了一个新线程。