相关疑难解决方法(0)

Java中关闭钩子的有用示例?

我正在努力确保我的Java应用程序采取合理的步骤来保持健壮,其中一部分涉及优雅地关闭.我正在阅读有关关闭钩子的事情,我实际上并没有在实践中如何使用它们.

那里有一个实际的例子吗?

Let's say I had a really simple application like this one below, which writes numbers to a file, 10 to a line, in batches of 100, and I want to make sure a given batch finishes if the program is interrupted. I get how to register a shutdown hook but I have no idea how to integrate that into my application. Any suggestions?

package com.example.test.concurrency;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

public class GracefulShutdownTest1 …
Run Code Online (Sandbox Code Playgroud)

java shutdown-hook

121
推荐指数
1
解决办法
13万
查看次数

JVM如何终止守护程序线程?或者如何编写正常终止的守护程序线程

假设场景:
我有一个守护程序线程负责一些I/O,主线程完成并返回,JVM决定终止我的守护程序线程.

它是如何做到的?打断?最终确定?如何对我的守护程序线程进行编码,以便在终止时能够优雅地做出反应?

java multithreading jvm daemon

28
推荐指数
2
解决办法
2万
查看次数

并行JUnit测试不执行shutdown hook

我正在使用Maven在并行类中运行多个JUnit测试.我有清理任务,需要在所有JUnit测试运行后发生.为了处理这个清理工作,我在一些测试中添加了一个关闭钩子.当我没有并行运行时,关闭挂钩正确执行,但是当我并行运行时,我没有看到关闭挂钩的输出(参见示例).有什么我做错了吗?System.exit在并行执行JUnit测试时,JVM是否退出使用?

根据Surfire文档文档,并行线程在同一进程中执行,因此我希望Runtime.getRuntime是相同的进程,即使它是在不同的测试和线程之间调用的. Maven Surfire插件 - 分叉选项和并行测试执行

使用parallel选项时要记住的重要事项是:并发发生在同一个JVM进程中.这在内存和执行时间方面是有效的,但您可能更容易受到竞争条件或其他意外且难以重现的行为的影响.

这是我单元测试的一个例子:

@Test
public void test()
{
    Runtime.getRuntime().addShutdownHook(new Thread()
    {
        @Override
        public void run()
        {
            System.out.println("Test clean up triggered");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这是我的pom的相关部分:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <parallel>classes</parallel>
        <threadCount>10</threadCount>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

编辑: 当我在@BeforeClass方法中添加关闭挂钩时,问题得到解决.当我在@Test方法中添加它时,我遇到了问题.我希望能够随时添加钩子.

java parallel-processing junit multithreading maven

7
推荐指数
1
解决办法
1317
查看次数