рдЧреНрд░рд╣рдг: рд╕рдВрд╕реНрдХрд░рдг: 2019-09 рдЖрд░ (4.13.0), рдмрд┐рд▓реНрдб рдЖрдИрдбреА: 20190917-1200
EclEmma 3.1.2.201903112331 org.eclipse.eclemma.feature.feature.group рдЧреНрд░рд╣рдг рдПрдХреНрд▓реЗрдореНрдорд╛
рдЬреБрдиреАрдЯ 4.13
рд╡рд┐рдВрдбреЛрдЬ 10 x64
рдЬрд╛рд╡рд╛ 1.8u241
рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдХрд╡рд░реЗрдЬ рдЪрд▓рд╛рддреЗ рд╕рдордп рдореИрдВрдиреЗ рдПрдХ рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЧреНрд░рд╣рдг рдореЗрдВ Google рдЕрдорд░реВрдж рдХреЗ рдХреИрд╢рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдХрд╡рд░реЗрдЬ рддреНрд░реБрдЯрд┐ рдХреЛрдб 5013 рдФрд░ java.net.SocketException: рдХрдиреЗрдХреНрд╢рди рд░реАрд╕реЗрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдХрд╡рд░реЗрдЬ рд╕рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдореИрдВ JUnit 4.12 рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реВрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░реАрдХреНрд╖рдг рджреЛрдиреЛрдВ рд╣реА рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдзрд┐:
https://github.com/ReactiveX/RxJava/blob/5f6aafcbaa97f330ad2007f4ad02c5e33db8914b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableGroupByTest.java#L1917
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдХреИрд╢ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
https://github.com/ReactiveX/RxJava/blob/5f6aafcbaa97f330ad2007f4ad02c5e33db8914b/src/test/java/io/reactivex/rxjava3/internal/operators/flowable/FlowableGroupByTest.java#L2194
рдХреГрдкрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗрдВред
рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рд╕реНрдЯреИрдХрдЯреНрд░реИрдХ рдФрд░/рдпрд╛ рдЧреНрд░реИрдбрд▓ рдмрд┐рд▓реНрдб рд╕реНрдХреИрди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреЛрдИ JVM рдХреНрд░реИрд╢ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рдирд╣реАрдВ рд╣реИред рдХрдиреЗрдХреНрд╢рди рдЦреЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЧреНрд░рд╣рдг рддреНрд░реБрдЯрд┐ (java.net.SocketException: рдХрдиреЗрдХреНрд╢рди)ред рдЬрдм рдореИрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЧреНрд░реИрдбрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред
рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореБрдЭреЗ рдЧреНрд░рд╣рдг рдпрд╛ рдПрдХреНрд▓реЗрдореНрдорд╛ рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╕рдВрджреЗрд╣ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЙрдирдХреЗ рд╕рд╛рде рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдареАрдХред рдПрдХ рдЖрдЦрд┐рд░реА рдкреНрд░рд╢реНрдиред рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬреБрдиреАрдЯ 4.13 рдПрдХреАрдХрд░рдг рдореЗрдВ рдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ?
рдЦреИрд░, рд╣рдореЗрд╢рд╛ рдПрдХ рдореМрдХрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рддреЛрдбрд╝рд╛ред рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╣рдордиреЗ рдПрдХреАрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдПрдкреАрдЖрдИ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред
рдЬрдм рдореИрдВрдиреЗ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреА рдЦреЛрдЬ рдХреА рддреЛ рдореБрдЭреЗ https://stackoverflow.com/a/42904311/95725 рдорд┐рд▓рд╛ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдореГрддрд┐ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 4.13 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рд╕рд╛рде рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдореЗрдореЛрд░реА-рд╡рд╛рд░ рдкрд╛рд░ рдХрд░ рд▓реЗрдВред
рдпрд╣ рднреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХреНрд▓рд╛рд╕рдкрд╛рде рдкрд░ рдЬреБрдиреАрдЯ рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдВред
рд╣рд╛рдВ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рдХреИрд╢-рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реИ, рди рдХрд┐ рдЕрдиреНрдп 12000+ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдПред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдПрдХреНрд▓реЗрдореНрдорд╛ рд▓реЛрдЧреЛрдВ рд╕реЗ рдХреЛрдИ рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред
рдирдорд╕реНрддреЗред рдореБрдЭреЗ EclEmma рд▓реЛрдЧреЛрдВ рд╕реЗ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реА: https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/jacoco/SHw3R6cvZSs/yaFgd7XUAQAJ
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рдЯрдбрд╛рдЙрди рд╣реБрдХ рдХреЛ 4.13 рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ 4.12 рдореЗрдВ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╡рд░реЗрдЬ рд╡рд┐рдлрд▓рддрд╛ред
рдпрд╣рд╛рдВ рдПрдХ рдЬреБрдиреАрдЯ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЗрд╕реА рддрд░рд╣ рдПрдХреНрд▓реЗрдореНрдорд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдЧрд╛) рдЬреЛ рдХрднреА-рдХрднреА "рд╣реБрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд" рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА 4.13 рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:
import java.util.concurrent.TimeUnit;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Timeout;
import com.google.common.cache.CacheBuilder;
public class ExampleTest {
static {
System.err.println("registering hook");
Thread thread = new Thread(new Runnable() {
<strong i="6">@Override</strong>
public void run() {
System.err.println("hook executed");
}
});
Runtime.getRuntime().addShutdownHook(thread);
System.err.println(thread.getThreadGroup());
}
<strong i="7">@Rule</strong>
public Timeout timeout = new Timeout(5, TimeUnit.MINUTES);
<strong i="8">@Test</strong>
public void test() {
CacheBuilder.newBuilder() //
.<Integer, Object>build();
}
}
рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВ
@akarnokd JaCoCo рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рд╕реЗ рдореЗрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдпрд╣рд╛рдВ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
@marcphilipp рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ (https://github.com/junit-team/junit4/issues/1652#issuecomment-593559646)ред
рд╕реНрдерд┐рд░ рдмреНрд▓реЙрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж java.lang.ApplicationShutdownHooks.hooks
. рдореЗрдВ рдПрдХ рд╢рдЯрдбрд╛рдЙрди рд╣реБрдХ рд╣реЛрддрд╛ рд╣реИ
{Thread@1552} "Thread[Thread-0,5,main]" -> {Thread@1552} "Thread[Thread-0,5,main]"
рдФрд░ CacheBuilder.newBuilder()
рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рджреЛ рд╣реИрдВ
{LogManager$Cleaner@1551} "Thread[Logging-Cleaner,5,FailOnTimeoutGroup]" -> {LogManager$Cleaner@1551} "Thread[Logging-Cleaner,5,FailOnTimeoutGroup]"
{Thread@1552} "Thread[Thread-0,5,main]" -> {Thread@1552} "Thread[Thread-0,5,main]"
LogManager$Cleaner@1551
java.util.logging.LogManager
(https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/util/logging/LogManager рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред .java#L253) рдХреНрдпреЛрдВрдХрд┐ com.google.common.cache.CacheBuilder
java.util.logging
$ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (https://github.com/google/guava/blob/v28.2/guava/src/com/google/common/cache/ рдХреИрд╢реЗрдмрд┐рд▓реНрдбрд░.рдЬрд╛рд╡рд╛#рдПрд▓226)ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рднреА FailOnTimeoutGroup
рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ org.junit.rules.Timeout
(https://github.com/junit-team/junit4/blob/r4.13/src/main/java/org/junit) рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред /рдЖрдВрддрд░рд┐рдХ/рдзрд╛рд╡рдХ/рдХрдерди/FailOnTimeout.java#L123)ред
рддреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж рдЗрд╕ рд╣реБрдХ рдХреА рд╢реБрд░реБрдЖрдд IllegalThreadStateException
(https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/Thread.java рдкрд░) #L709), рдХреНрдпреЛрдВрдХрд┐ рд╕рдореВрд╣ рдкрд╣рд▓реЗ рд╣реА рдирд╖реНрдЯ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ (https://github.com/junit-team/junit4/blob/r4.13/src/main/java/org/junit/internal/runners/statements/FailOnTimeout.java # рдПрд▓ 140)ред
рдпрд╣ рдЕрдкрд╡рд╛рдж рдмрд╛рдж рдХреЗ рд╣реБрдХ (https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/ApplicationShutdownHooks.java#L101-L103) рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/Shutdown.java#L115-L129)ред
рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╣реБрдХ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рд╡рд╣ keySet
рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/ApplicationShutdownHooks.java#L97 ) IdentityHashMap
(https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/ApplicationShutdownHooks.java#L39) рдХрд╛ рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рджреМрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝реЗрдВред
JUnit 4.12 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ FailOnTimeoutGroup
рдХрд╛ рд╡рд┐рдирд╛рд╢ JUnit 4.13 (https://github.com/junit-team/junit4/commit/63fd27710ee2bab6fdf00965f41ef12b79120c70) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХреЗ рджреМрд░рд╛рди рджреЗрдЦреЗ рдЧрдП 4.12 рдФрд░ 4.13 рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ (https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/jacoco/SHw3R6cvZSs/yaFgd7XUAQAJ):
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Timeout;
import java.util.concurrent.TimeUnit;
public class ExampleTest {
<strong i="34">@Rule</strong>
public Timeout globalTimeout = new Timeout(5, TimeUnit.MINUTES);
<strong i="35">@Test</strong>
public final void test() {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
<strong i="36">@Override</strong>
public void run() {
System.err.println("hook executed");
}
}));
}
}
рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЬреБрдиреАрдЯ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
import java.util.logging.LogManager;
public class Example {
public static void main(String[] args) throws Exception {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
<strong i="40">@Override</strong>
public void run() {
System.err.println("example hook");
}
}));
ThreadGroup group = new ThreadGroup("example group");
Thread thread = new Thread(group, new Runnable() {
<strong i="41">@Override</strong>
public void run() {
LogManager.getLogManager();
}
}, "example thread");
thread.start();
thread.join();
group.destroy();
}
}
рддреЛ рдореИрдВ рдУрдкрдирдЬреЗрдбреАрдХреЗ рдореЗрдВ рдЯрд┐рдХрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯрд┐рдХрдЯ рдореЗрдВ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реБрдП, рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж https://bugs.openjdk.java.net/browse/JDK-6704979
рдлрд┐рд░ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЬреБрдиреАрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
@Godin рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ
@kcooney рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ/рдпрд╛рдж рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ ThreadGroup
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдХреНрдпрд╛ рдерд╛?
@marcphilipp рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдЯреВрдЯрдирд╛ https://github.com/junit-team/junit4/commit/63fd27710 рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдерд╛ рдЬрд┐рд╕реЗ @ elrodro83 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдереНрд░реЗрдбрдЧреНрд░реБрдк рдХреЛ https://github.com/junit-team/junit4/commit/1768d08d0 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
@akarnokd рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрдпрд╛ рдЖрдкрдиреЗ JUL рдХреЛ рдЬрд▓реНрджреА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕реНрдЯреИрдЯрд┐рдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ?
рдирд╣реАрдВред рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╡рд░реЗрдЬ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдм рддрдХ, рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрди рдХреИрд╢рдмрд┐рд▓реНрдбрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рдЬрд╛ рд░рд╣реА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдереАред
63fd277 . рдХреЗ рдХрд╛рд░рдг
рдпрд╛рдиреА #1517 рдмреИрдХрд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдПред
рдЬрд╝рд░рд╛ рд╕реБрдирд┐рдП рд╕рднреАред @jglick рдиреЗ #1517 рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд╣рдо #1517 рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗ рд▓реЗрдВ рдпрд╛ рдЗрд╕реЗ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВред
рдкреАрдЖрд░ #1517 рдХреЗ ThreadGroup.destroy()
рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рднреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИред
рдПрдХреНрд▓рд┐рдкреНрд╕ рдХреИрд▓рд┐рдлрд╝реЛрд░реНрдирд┐рдпрд╛ рдореЗрдВ рдпрд╣ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдереНрд░реЗрдб рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА "рджреМрдбрд╝" рдФрд░ ThreadGroup.destroy()
рдХреА рдХреЙрд▓ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИред
рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдирд┐рдпрдо рдФрд░ рд╕реНрдерд┐рд░ рдереНрд░реЗрдбрдЧреНрд░реБрдк рдХреЗ рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рдЖрджреЗрд╢ рдХреА рд╕реНрдерд┐рддрд┐ рднреА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╕рдореВрд╣ рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдирд┐рдпрдо рдХреЗ рдмрд╛рд╣рд░ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрджрд┐ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛
рдЕрд╕реНрдерд╛рдпреА рдХрд╛рдордХрд╛рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА "рд╕реНрдереИрддрд┐рдХ" рдереНрд░реЗрдб-рд╕рдореВрд╣ рдХрд┐рд╕реА рднреА рдЯрд╛рдЗрдордЖрдЙрдЯ рдирд┐рдпрдо рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдСрдкреНрдЯ-рдЖрдЙрдЯ рдзреНрд╡рдЬ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
@kcooney рдЖрдк рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ?
Timeout
рдирд┐рдпрдо рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Builder
рд╣реИред FMPOV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЕрдЧрд░ рд╡рд╣рд╛рдВ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ 4.13 рдХреЗ рдХрдо рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рдХрдо рд░рд┐рдкреЛрд░реНрдЯ рд╣реЛред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдереНрд░реЗрдбрдЧреНрд░реБрдк рд▓реАрдХреЗрдЬ рдХреА рдХрдИ рд░рд┐рдкреЛрд░реНрдЯреЗрдВ рдереАрдВ, рдФрд░ рдЬреБрдиреАрдЯ 4.12 рд╕реЗ рдереНрд░реЗрдбрдЧреНрд░реБрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ (рджреЗрдЦреЗрдВ https://github.com/junit-team/junit4/commit/1768d08)ред
рдЕрдЧрд░ рд╣рдордиреЗ 4.13 рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛрддрд╛, рддреЛ рдореИрдВ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдСрдкреНрдЯ-рдЗрди рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдЕрднреА рдСрдкреНрдЯ-рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдЬреИрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдирдИ рд░рд┐рд▓реАрдЬрд╝ 4.14 рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдСрдкреНрдЯ рдЗрди рдпрд╛ рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред JUnit 4.x рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╕рд┐рд╕реНрдЯрдо рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбреЗрд╡рд┐рдб рд╕реИрдл рдиреЗ рдЕрддреАрдд рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЖрдкрддреНрддрд┐ рдЬрддрд╛рдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдереНрд░реЗрдб рд╕рдореВрд╣ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдбреЗрдореЙрди рд╕рдореВрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ (рдмрд╛рд▓ рдереНрд░реЗрдб рд╕рдореВрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдбрд┐рдорди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ) рдФрд░ рд╣рдо рдЙрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдмрдЧ рдлрд┐рдХреНрд╕ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдбрд┐рдорди рдереНрд░реЗрдб рд╕рдореВрд╣ рдмрдирд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдХреНрдпрд╛ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ?
рдХреНрдпрд╛ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ 4.13.2 рдХреЛ рдЬрд▓реНрджреА рд░рд┐рд╣рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ <4.13.1 рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдореБрдЭреЗ рдХреБрдЫ рд╣рдж рддрдХ рдЕрд╡рд░реБрджреНрдз рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдВ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдПрдлрд╡рд╛рдИрдЖрдИ рдореЗрд░рд╛ рдиреНрдпреВрдирддрдо рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкреЛрд╕реНрдЯ рдФрд░ рдЗрд╕ рдЬреАрдердм рд░реЗрдкреЛ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@ j256 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдордиреЗ рдЕрднреА рддрдХ рд╕рдордпрд╕реАрдорд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рд╣реИред рдореИрдВрдиреЗ рдЪреАрдЬреЛрдВ рдХреЛ 4.13.2 рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
/** Workaround for the already fixed JUnit 4 issue #1652 (<https://github.com/junit-team/junit4/issues/1652>):
* Can be used in JUnit 4.13 and 4.13.1 in tests with a timeout to prevent the thread group from being destroyed
* and thus JaCoCo (used e.g. by EclEmma) loosing its collected data. */
public static void workaround_for_junit4_issue_1652() {
String version = junit.runner.Version.id();
if (!"4.13.1".equals(version) && !"4.13".equals(version))
fail("Workaround for JUnit 4 issue #1652 required for JUnit 4.13 and 4.13.1 only; actual version: "
+ version);
Thread thread = Thread.currentThread();
if (!"Time-limited test".equals(thread.getName())) fail("Workaround only required for a test with a timeout.");
new Thread(thread.getThreadGroup(), new Runnable() {
<strong i="6">@Override</strong>
public void run() {
try {
while (!thread.isInterrupted()) Thread.sleep(100);
} catch (InterruptedException e) {}
}
}).start();
}
@Test(timeout = 42)
public void test() {
workaround_for_junit4_issue_1652();
// ...
}
рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде 4.13.2 рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреЛрдИ рдЕрдкрдбреЗрдЯ @kcooney? рдлрд┐рд░ рд╕реЗ, 4.13.1 рд╕реЗ рдкрд╣рд▓реЗ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдЕрдм рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╕реАрдЖрдИ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рджред
@j256 4.13.2 рдЕрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @marcphilipp !
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВ
@akarnokd JaCoCo рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рд╕реЗ рдореЗрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдпрд╣рд╛рдВ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
@marcphilipp рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ (https://github.com/junit-team/junit4/issues/1652#issuecomment-593559646)ред
рд╕реНрдерд┐рд░ рдмреНрд▓реЙрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж
java.lang.ApplicationShutdownHooks.hooks
. рдореЗрдВ рдПрдХ рд╢рдЯрдбрд╛рдЙрди рд╣реБрдХ рд╣реЛрддрд╛ рд╣реИрдФрд░
CacheBuilder.newBuilder()
рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рджреЛ рд╣реИрдВLogManager$Cleaner@1551
java.util.logging.LogManager
(https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/util/logging/LogManager рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред .java#L253) рдХреНрдпреЛрдВрдХрд┐com.google.common.cache.CacheBuilder
java.util.logging
$ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (https://github.com/google/guava/blob/v28.2/guava/src/com/google/common/cache/ рдХреИрд╢реЗрдмрд┐рд▓реНрдбрд░.рдЬрд╛рд╡рд╛#рдПрд▓226)редрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рднреА
FailOnTimeoutGroup
рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬрд┐рд╕реЗorg.junit.rules.Timeout
(https://github.com/junit-team/junit4/blob/r4.13/src/main/java/org/junit) рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред /рдЖрдВрддрд░рд┐рдХ/рдзрд╛рд╡рдХ/рдХрдерди/FailOnTimeout.java#L123)редрддреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж рдЗрд╕ рд╣реБрдХ рдХреА рд╢реБрд░реБрдЖрдд
IllegalThreadStateException
(https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/Thread.java рдкрд░) #L709), рдХреНрдпреЛрдВрдХрд┐ рд╕рдореВрд╣ рдкрд╣рд▓реЗ рд╣реА рдирд╖реНрдЯ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ (https://github.com/junit-team/junit4/blob/r4.13/src/main/java/org/junit/internal/runners/statements/FailOnTimeout.java # рдПрд▓ 140)редрдпрд╣ рдЕрдкрд╡рд╛рдж рдмрд╛рдж рдХреЗ рд╣реБрдХ (https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/ApplicationShutdownHooks.java#L101-L103) рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/Shutdown.java#L115-L129)ред
рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╣реБрдХ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рд╡рд╣
keySet
рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/ApplicationShutdownHooks.java#L97 )IdentityHashMap
(https://github.com/openjdk/jdk/blob/jdk8-b120/jdk/src/share/classes/java/lang/ApplicationShutdownHooks.java#L39) рдХрд╛ рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рджреМрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝реЗрдВредJUnit 4.12 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
FailOnTimeoutGroup
рдХрд╛ рд╡рд┐рдирд╛рд╢ JUnit 4.13 (https://github.com/junit-team/junit4/commit/63fd27710ee2bab6fdf00965f41ef12b79120c70) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХреЗ рджреМрд░рд╛рди рджреЗрдЦреЗ рдЧрдП 4.12 рдФрд░ 4.13 рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ (https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/jacoco/SHw3R6cvZSs/yaFgd7XUAQAJ):рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЬреБрдиреАрдЯ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рддреЛ рдореИрдВ рдУрдкрдирдЬреЗрдбреАрдХреЗ рдореЗрдВ рдЯрд┐рдХрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯрд┐рдХрдЯ рдореЗрдВ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реБрдП, рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж https://bugs.openjdk.java.net/browse/JDK-6704979
рдлрд┐рд░ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЬреБрдиреАрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред