草庐IT

【JavaEE】线程池

全部标签

java - 如何访问正在运行的线程/runnable?

我有一个正在运行的线程,但从外部我无法绕过一个值来停止该线程。如何在Mytest()中发送false/true值或调用正在运行的线程公共(public)方法?当我按下按钮1?例如:thread.interrupt();runnable.stop();或runnable.start();//MainpublicclassMainextendsJFrame{publicstaticRunnablerunnable;publicstaticThreadthread;privateJButtonb1=newJButton("Start/Stop");publicvoidinit(){//Exe

java - 为什么这段代码不是线程安全的?

在下面的代码片段中,将doThings()方法声明为静态方法将使类线程安全。这是因为如果启动了多个TestSeven线程,并且由于x是静态变量,可能会出现竞争条件吗?publicclassTestSevenextendsThread{privatestaticintx;publicsynchronizedvoiddoThings(){intcurrent=x;current++;x=current;}publicvoidrun(){doThings();}publicstaticvoidmain(Stringargs[]){TestSevent=newTestSeven();Threa

java - notify可以多次唤醒同一个线程吗?

假设您在Java中有一个典型的生产者-消费者模式。为了提高效率,您希望在将新元素添加到队列时使用notify()而不是notifyAll()。如果两个生产者线程调用通知,是否保证两个不同的等待消费者线程将被唤醒?或者可能是两个notify()相继触发导致同一个comsumer线程两次排队等待唤醒?我找不到该部分是描述其具体工作原理的API。java是否有一些原子内部操作来唤醒线程一次?如果只有一个消费者在等待,那么第二个通知就会丢失,这没问题。 最佳答案 我的回答包含一些特定于实现的信息。它基于我对SunJVM和其他线程库行为的工作

java - JVM退出后守护线程如何存活?

我正在阅读关于Java的setDaemon()方法的文档,当我读到JVM没有等待守护线程完成就退出时感到困惑。但是,由于本质上守护线程是JavaThread,它可能依赖于在JVM上运行来实现其功能,如果JVM在守护线程完成之前退出,守护线程如何生存? 最佳答案 他们无法生存。当所有线程(守护程序线程除外)都已死亡时,JVM将退出。当您启动您的应用程序时,JVM将启动一个单一的非守护线程来运行您的静态main方法。一旦main方法退出,这个主线程就会结束,如果你没有生成其他非守护线程,JVM就会退出。但是,如果您启动了另一个线程,JV

java - 多线程 - 多个用户

当单个用户访问应用程序时,可以使用多个线程,如果存在多个内核,它们可以并行运行。如果只有一个处理器,那么线程将一个接一个地运行。当多个用户访问一个应用程序时,线程是如何处理的? 最佳答案 我可以从Java的角度来谈,所以你的问题是“当多个用户访问一个应用程序时,线程是如何处理的?”。答案是这完全取决于您的编程方式,如果您使用的是某些网络/应用程序容器,它们会提供线程池机制,您可以在其中拥有多个线程来处理服务器用户请求,每个用户发起一个请求,然后依次发起一个请求由一个线程处理,所以如果有10个并发用户,将有10个线程同时处理10个请求

java - 如何在 Java 并行程序中获得理想的线程数?

我需要在批处理程序中获得理想数量的线程,该批处理程序在支持并行模式的批处理框架中运行,例如SpringBatch中的并行步骤。据我所知,执行程序步骤的线程太多并不好,它可能会对程序的性能产生负面影响。一些因素可能会导致性能下降(上下文切换、使用共享资源时的竞争条件(锁定、同步..)......(还有其他因素吗?))。当然,获得理想线程数的最佳方法是对我进行实际程序测试以调整程序的线程数。但在我的情况下,真正的测试并不是那么容易,因为测试需要很多东西(人员、测试安排、测试数据等),这些对我现在来说太难准备了。因此,在进行实际测试之前,我想尽可能地了解如何获得我的程序的可猜测理想线程数。我

java线程和主线程

让主线程等待所有线程完成的最佳方法是什么?for(inti=0;i 最佳答案 创建一个列表并等待所有。Listthreads=newArrayList();for(inti=0;i然而,使用ExecutorService可能是处理线程池的一种更优雅的方式。ExecutorServicees=Executors.newCachedThreadPool();for(inti=0;i 关于java线程和主线程,我们在StackOverflow上找到一个类似的问题:

java - 对象中正在运行的线程是否会阻止它在 Java 中被垃圾收集?

给定代码:newThread(newBackgroundWorker()).start();直觉上感觉BackgroundWorker实例在线程退出之前应该不会受到GC的影响,但事实真的如此吗?为什么?编辑:所有这些热度基本上都是由于我在同一个帖子中至少提出了两个不同的问题而产生的。标题中的问题有一个答案,代码示例指向不同的方向——根据内联有两种可能的结果。发布的答案真的很棒。我将授予SoftwareMonkey绿色复选框。请注意Darron的回答同样有效,但SoftwareMonkey解释了我遇到的问题;这是对我有用的答案。谢谢大家让这件事成为一件令人难忘的事情;)

java - 使用多核处理器是否需要多线程算法?

我只是想知道如果算法必须使用多核处理器,我们是否真的需要多线程算法,或者即使我们的算法是顺序的,jvm是否会使用多核处理器?更新:相关问题:Muti-Threadedquickormergesortinjava 最佳答案 我不相信任何当前的生产JVM实现都执行自动多线程。它们可能使用其他核心进行垃圾收集和其他一些内务管理,但如果您的代码是按顺序表示的,则很难自动并行化它并仍然保持精确的语义。可能有一些实验性/研究型JVM试图并行化JIT可能发现的并行性令人尴尬的代码区域,但我还没有听说过用于生产系统的类似情况。即使JIT确实发现了这

java - 在 Java 中停止线程?

这个问题在这里已经有了答案:Howtoabortathreadinafastandcleanwayinjava?(15个答案)关闭去年。我正在编写一段连接到服务器的代码,使用该连接生成一堆线程并执行一堆“东西”。在某些情况下连接失败,我需要停止一切并从头开始使用一个新对象。我想在对象之后清理,但在线程上调用thread.stop,但这种方法似乎已被弃用。推荐的替代方法是什么?我应该为每个线程编写自己的清理和退出方法吗?将线程设置为空?或者是其他东西?