这是关于Java线程词汇的一个非常基本的问题。
我看不到任何可能的重复项,但可能存在。
Oracle文档中“
活着
”一词指的是什么?
是run()
方法尚未完成时还是其他参数?
根据您提到的Javadoc:
如果线程已经启动但尚未死亡,则该线程是活动的。
线程在start()
调用其方法时“启动”,并在其方法结束时“死亡”
run()
,或在stop()
调用时(现在已弃用)。因此,是的,当线程的run()
方法仍在进行中时,该线程为“活动” ,但在JVM
调用start()
与隐式调用该run()
方法之间的时间窗口中,该线程也为“活动” 。
您还可以检查Thread.getState()
和有关线程有趣的信息,美国建议由@Marou
Maroun。
我也遵循他的建议,警告您,如果抛出Exception并传播到以外,则Thread可能会提前结束run
。在这种情况下,线程将不再存在。
编辑:如@zakkak所建议,即使该run()
方法尚未启动,也可以将线程视为活动线程。如果您希望对何时调用它进行适当的控制,请使用ScheduledExecutorService
,特别是schedule()
为您提供更精确的执行计划的方法。
问题内容: 线程1:正在执行此循环 线程2将运行错误设置为假如果运行是易失性变量,则线程1退出循环并显示“完成”。 我的问题是,如果运行不是易失的,那么Thread1何时从主内存中读取运行变量? 注意:我很了解同步和volatile变量之间的关系,但是即使运行不是volatile或同步的,线程1也会停止。所以我的问题是,鉴于没有同步或没有波动,线程1什么时候决定从主存储器读取数据 问题答案: 这在
问题内容: 想在一个固定的时间内运行一个线程。如果未在该时间内完成,我想杀死它,抛出一些异常或以某种方式处理它。怎么做到呢? 我从该线程 了解到的一种方法是在该线程的run()方法内使用TimerTask。 有没有更好的解决方案呢? 编辑:添加赏金,因为我需要一个更明确的答案。下面给出的ExecutorService代码无法解决我的问题。为什么在执行完某些代码后就进入sleep()-我无法处理这段
问题内容: 除了堆转储(java_pid14941.hprof),Java 6还会生成线程转储吗? 这就是我的一个应用程序发生的事情。 java.lang.OutOfMemoryError:超出了GC开销限制将堆倾倒到java_pid14941.hprof … 我确实在工作目录中找到了ava_pid14941.hprof,但没有找到任何包含线程转储的文件。当我收到此OutOfMemory错误时,我
问题内容: 我读了这句话: 主线程必须是完成执行的最后一个线程。当主线程停止时,程序终止。 是真的吗 我也知道“即使主线程死程序继续运行”。 据我了解:启动程序时,JVM创建一个线程来运行您的程序。JVM创建一个用于运行程序的用户线程。该线程称为主线程。该类的main方法是从主线程调用的。如果程序从主线程中产生新线程,它将停止直到最后一个线程死亡。 哪一个是对的? 问题答案: 当所有非守护程序线程
以下是上述应用程序的代码(包括2个类:Main和ClockPanel) 问题是:如果我删除该行(正如我在上面的代码中所评论的那样),时钟将不会运行。我完全不知道为什么会这样。有人能给我解释一下吗?是因为系统。出来println()影响正在运行的线程或其他什么?
问题内容: 我正在阅读以下链接 http://java-latte.blogspot.in/2013/10/cyclicbarrier- in-java-concurrency.html 。 在示例1中,主要方法CyclicBarrier被重用,而没有调用 reset 方法。 我运行了示例,它运行良好。因此,我想知道方法的用途是什么。什么时候应该叫它?还是我们完全需要调用它? 问题答案: A 是循