【问题标题】:Java 7: Thread reuse? (disconnect - reconnect)Java 7:线程重用? (断开 - 重新连接)
【发布时间】:2011-09-02 16:16:34
【问题描述】:

当线程终止并创建新线程时,线程编号 (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”是什么意思?)

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

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

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

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

    此外,Java 7 也没有什么特别之处。Java 6 的行为完全相同(我怀疑以前的版本也是如此)。

    【讨论】:

    • 谢谢。嘿 - 高兴!我现在有足够的分数来投票给你的答案。你知道“5,main”是什么意思吗?
    • 虽然我认为这意味着线程 id 将类似于麦当劳出售的汉堡包的数量。希望他们至少在使用 BigInteger。
    • 我怀疑“5, main”后缀必须是由创建(或维护)线程的人附加的。
    【解决方案2】:

    Thread-0,5,main

    0 : 编号

    5:优先级

    主要:名称

    线程ID是long;如果我们每秒创建一百万个线程,经过 30 万年,id 就会溢出。

    【讨论】:

      【解决方案3】:

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

      没有。

      并创建了一个新线程。

      是的。

      【讨论】:

      • 感谢您的澄清。我可以看到我在写这个问题时实际上并没有考虑到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 2012-08-07
      • 2019-02-22
      • 1970-01-01
      相关资源
      最近更新 更多