我的多线程概念薄弱,正在尝试学习。
在Java中,我所知道的是,我们不能多次调用一个线程:
Thread t = new Thread; //Some Runnable
t.start();
t.start(); //Illegal and throw Exception at runtime.
据我所知,当您t.start()
再次调用该函数时,它会引发异常,因为一旦线程退出run()
方法,并且您试图再次初始化事物,该线程的关联堆栈就会被破坏。
在那种情况下,我对线程池的了解是,它提供了更好的性能并节省了时间,因为不需要创建新线程(我在此阅读)。
如果不需要在线程池中创建新线程,那么它如何与刚刚完成其run方法的同一线程一起工作,该线程可以再次使用吗?
我读了这篇文章,它说:“
java.util.concurrent中的大多数执行程序实现都使用线程池,该线程池由工作线程组成。这种线程与它执行的Runnable和Callable任务分开存在,通常用于执行多个任务。
”
那么这里的Worker线程是什么,它与普通的Java线程有什么不同吗?
我得到了一些东西,但是仍然困惑于当我们使用线程池时可以消除什么样的东西,以及为什么它比普通的Java线程具有更好的性能。
所以我们可以这样说吗
线程分为三个部分,
因此,考虑以上3个步骤,可以在创建固定数量的线程之后取消使用线程池的步骤1和步骤3。每个任务仅执行步骤2,这就是为什么线程池更快的原因?我们可以这样说吗?我对么?
如果不需要在ThreadPool方案中创建新的Thread,那么它如何与刚刚完成run方法的同一线程一起工作,该Thread可以再次使用吗?
很简单-原始线程实际上从未完成。它只是等待另一个任务执行。用伪代码:
// No, this isn't even slightly accurate! General impression only :)
while (!pool.isShutdown()) {
Runnable task = pool.waitForTaskOnQueue();
task.run();
}
(显然,当线程池关闭时,它也需要停止等待其他任务的线程,但是希望您能理解一般的想法。)
我的多线程概念很弱,正在努力学习。 在Java中,我所知道的是,我们不能多次调用线程: 据我所知,当您再次调用时,它会引发异常,因为线程的关联堆栈一旦退出方法,并且您再次尝试初始化时就会被破坏。 在那种情况下,我对线程池的了解是,它给出了更好的性能&节省了时间,因为不需要创建新线程(我在这里读到)。 如果在线程池场景中不需要创建新的线程,那么它是如何与刚完成其run方法的同一线程一起工作的,该线程
问题内容: 我是一个初学者,在理解一段代码时遇到了麻烦。有人可以在这个功能启动时给我解释一下,它的作用是什么? 这是我的代码: 问题答案: 让我从一些背景知识开始(您可能已经了解了,但是需要进行解释)。 用于显示项目的长列表(或网格)。假设您要显示100行。一种简单的方法是只创建100个视图,每行一个视图,然后将它们全部布局。但这将是浪费的,因为它们中的大多数将不在屏幕上,因为可以说其中只有10个
问题内容: 基本上,此代码在两个类中创建了两个线程,它们从第三类中调用。每个线程都有一个循环,每次循环后都会进入休眠状态。 (代码末尾) 输出为: 1)我不知道为什么它会这样工作。我的意思是应该先打印“ CHECK 0 CHECK”。但是,为什么在线程1之前打印CHECK 1 CHECK(而在代码中调用Thread1之后才打印),而对于CHECK 2 CHECK和Thread2却一样? 2)如果我
我试图理解fork-join的窃取部分。fork-join池具有具有自己Deque的工作线程。如果工作线程自身的deque为空,则该线程从另一个工作线程中窃取。 线程如何访问其他线程的状态? 当所有者线程和窃取者线程尝试访问取消排队中的同一项目时,它不会产生同步问题吗?
我对Java FX应用程序线程有问题。下面是一个伪代码: 问题是睡眠发生在窗口中,该窗口显示在show Menu()中,show LoadingPic()根本没有显示,而在最后窗口中显示的是show Map()。 show LoadingPic中的场景有一个进度条,运行2秒,与Thread.sleep(2000)相同。 因此,似乎javafx应用程序线程块show LoadingPic()和sho