Ksenia Asked:2020-01-20 07:12:26 +0000 UTC2020-01-20 07:12:26 +0000 UTC 2020-01-20 07:12:26 +0000 UTC 为什么流不能被重用? 772 也许是一个愚蠢的问题,但仍然......为什么不能重用线程? 多次启动一个线程是不合法的。特别是,线程一旦完成执行就可能不会重新启动。 java 2 个回答 Voted Best Answer default locale 2020-01-22T12:32:25Z2020-01-22T12:32:25Z 重用线程不会带来实实在在的好处。相反,重启线程会给程序员带来不便: 如果一个线程可以运行两次,那么它可以从多个线程中运行两次。同时,不清楚是否需要通知客户端线程主题线程的“双重”状态。 跟踪线程的状态是没有意义的。线程永远不会真正结束,因为 可能会重新启动自己或被另一个线程重新启动。 访问共享资源是多线程编程中的一个主要问题。Java 中的一次性流更容易理解,因为 允许虚拟机接管线程状态更改的同步。 也许还有技术争论:虚拟机使用操作系统线程,可以限制重启。但是简化客户端代码本身就是一个足够有力的论据。 PS 你可以重复使用对象Runnable。实现接口并根据需要创建线程就足够了: Runnable myRunnable = new MyRunnableObject(); new Thread(myRunnable).start(); //синхронизация внутреннего состояния MyRunnableObject по вкусу new Thread(myRunnable).start(); ... Ramiz 2020-01-30T17:56:37Z2020-01-30T17:56:37Z 这个问题一点也不傻。只是您过于狭隘地寻找答案:) 可以重用流(ahtung:只是重用,而不是重新启动)。这种方法称为线程池:您可以在oracle 的规范或Habré 上的文章中了解它
重用线程不会带来实实在在的好处。相反,重启线程会给程序员带来不便:
如果一个线程可以运行两次,那么它可以从多个线程中运行两次。同时,不清楚是否需要通知客户端线程主题线程的“双重”状态。
跟踪线程的状态是没有意义的。线程永远不会真正结束,因为 可能会重新启动自己或被另一个线程重新启动。
访问共享资源是多线程编程中的一个主要问题。Java 中的一次性流更容易理解,因为 允许虚拟机接管线程状态更改的同步。
也许还有技术争论:虚拟机使用操作系统线程,可以限制重启。但是简化客户端代码本身就是一个足够有力的论据。
PS 你可以重复使用对象
Runnable。实现接口并根据需要创建线程就足够了:这个问题一点也不傻。只是您过于狭隘地寻找答案:) 可以重用流(ahtung:只是重用,而不是重新启动)。这种方法称为线程池:您可以在oracle 的规范或Habré 上的文章中了解它