- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我的多线程概念很薄弱,正在努力学习。
据我所知,在 Java 中,我们不能多次调用线程:
Thread t = new Thread; //Some Runnable
t.start();
t.start(); //Illegal and throw Exception at runtime.
据我所知,当你再次调用 t.start()
时它会抛出异常,因为线程的关联堆栈一旦退出 run()
就会被销毁code> 方法,你正在尝试再次初始化。
在这种情况下,我对线程池的了解是,它可以提供更好的性能并节省时间,因为不需要创建新线程(我在 this 中读到)。
如果在线程池场景中不需要创建新线程,那么它如何与刚刚完成其运行方法的同一个线程一起工作,该线程是否可以再次使用?
我读过 this ,并且它说“java.util.concurrent 中的大多数执行器实现都使用线程池,它由工作线程组成。这种线程与其执行的 Runnable 和 Callable 任务分开存在,并且通常用于执行多个任务。"
那么这里的 Worker 线程是什么,它和普通的 Java 线程有什么不同吗?
与 this链接,我得到了一些东西,但仍然对使用线程池时可以消除哪些东西以及为什么它比使用普通 java 线程提供更好的性能感到困惑。
所以我们可以这样说,
线程分为三个部分,
因此,考虑到以上 3 个步骤,线程池的第 1 步和第 3 步可以在创建固定数量的线程后消除。每个任务只会执行第 2 步,这就是为什么线程池更快?我们可以这样说吗?我说的对吗?
最佳答案
If there is no need to create new Thread in ThreadPool scenario, then how it works with same thread which just finished its run method, will that Thread can be used again?
简单 - 原始线程从未真正完成。它只是等待另一个任务执行。在伪代码中:
// No, this isn't even slightly accurate! General impression only :)
while (!pool.isShutdown()) {
Runnable task = pool.waitForTaskOnQueue();
task.run();
}
(很明显,当线程池关闭时,它也需要停止等待线程等待另一个任务 - 但希望您能大致了解。)
关于java - Threadpool 如何重用线程以及它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765904/
我在我的应用程序中使用 Windows ThreadPools,每次调用 CreateThreadPoolWork() 时都会遇到 136 字节的内存泄漏,如通过 UMDH 所见: + 1257728
摘自对我之前一个问题的回答( Task.Factory.StartNew starts with a great delay despite having available threads in t
这有什么区别?请引用选项1和选项2。因为我遇到了麻烦,因为它们好像是一样的。它们运行正确 Thread ThreadPoolExecutor executor = (ThreadPoolExecuto
Windows Phone 8 SDK 文档没有描述 Windows.System.Threading.ThreadPool 之间的区别。和 System.Threading.ThreadPool .
我无法通过JSP使用Elasticsearch Java API。在下面,我试图解释我所做的事情。 :| 我已经按照 flex 指令在系统上安装了elasticseach 2.3.3,并在命令提示符下
我试图在 Thread 的帮助下找出控制台应用程序中运行的线程数: new Thread(() => { while (true) {
我们对来自 Android 应用程序的所有网络流量使用 Retrofit/OkHttp3。到目前为止,一切似乎都很顺利。 但是,我们现在偶尔会遇到我们的应用程序/进程用完文件句柄的情况。 Androi
我们应该为长时间运行的线程使用线程池还是启动我们自己的线程?有什么设计模式吗? 最佳答案 不幸的是,这取决于。没有硬性规定说您应该始终使用线程池。 线程池提供两个主要功能: 线程的委托(delegat
简介 上文提到,创建线程在操作系统层面有4大无法避免的开销。因此复用线程明显是一个更优的策略,切降低了使用线程的门槛,提高程序员的下限。 .NET Core线程池日新月异,不同版本实现都有差别,在
我只是实现了一个线程池,如这里所述 Allen Bauer on thread pools 非常简单的实现,可以正常工作,但是我的应用程序不再关闭。似乎有两个工作线程(和另一个线程,我想是排队线程)卡
我有以下代码: static void Main(string[] args) { Console.Write("Press ENTER to start..."); Console.
我在下面编写了一个示例程序。 class Program { static int x = 2; static void Main(string[] args)
我试图了解Parralel.For和ThreadPool.QueueUserWorkItem之间的区别。 硬件和软件: 英特尔i5(四核) Windows 7 64位教授 DotNet 4.5 案例1
当用户单击按钮时,我使用ThreadPool.QueueUserWorkItem生成了一个启动长时间运行的线程的线程。我想在线程完成时使按钮可见,以便用户可以单击它。 ThreadPool中是否有已完
我想要一个类似的功能: public static V callAsyncAndWait(Func func) { ThreadPool.QueueUserWorkItem(obj =>
我正在尝试编写一个 Java 多线程程序,对作为文件给出的 2 个矩阵执行乘法,并使用有限的线程总数。 例如,如果我将线程数设置为 16,我希望我的线程池能够重用这 16 个线程,直到所有任务完成。
我有一个 C# 控制台应用程序,其中有一个线程池。在线程池中会有一个类执行一个连续的方法(直到它运行了一段时间或者知道什么时候停止)。该方法连接到 HttpWebResponse 流并继续读取它。 问
我正在使用 Reflector 仔细阅读 .Net ThreadPool 的一些源代码,当它显示以下内容时: private static bool QueueUserWorkItemHelper(W
每当用户扫描条形码时,我都会触发一个线程。 大多数时候它是一个相当短的运行线程。但有时可能需要很长时间(等待调用 GUI 线程)。 我读到过,为此使用 ThreadPool 可能是个好主意,而不是为每
我有一个场景,我试图通过在可能的情况下在用户实际需要之前预取结果的一些子元素来转变为响应速度更快的 UI。我不清楚如何最好地处理线程,所以我希望有人可以提供一些建议。 场景 有一个搜索表单(.NET
我是一名优秀的程序员,十分优秀!