You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/12/18 14:54:06 UTC
(commons-lang) 02/02: Add BasicThreadFactory.builder() and deprecate BasicThreadFactory.Builder()
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git
commit 35fee6998b8d92c047f6db82fde825810fc26f4a
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Wed Dec 18 09:53:58 2024 -0500
Add BasicThreadFactory.builder() and deprecate
BasicThreadFactory.Builder()
Add BasicThreadFactory.deamon()
---
src/changes/changes.xml | 2 +
.../lang3/concurrent/BasicThreadFactory.java | 23 ++++++++++
.../lang3/concurrent/BasicThreadFactoryTest.java | 49 ++++++++++++++++++----
3 files changed, 66 insertions(+), 8 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d5754b251..d268afaa4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -85,6 +85,8 @@ The <action> type attribute can be add,update,fix,remove.
<action type="add" dev="ggregory" due-to="Gary Gregory">Add ArrayUtils.containsAny(int[], int...).</action>
<action type="add" dev="ggregory" due-to="asgh, Gary Gregory">Add CalendarUtils.toLocalDate() #725.</action>
<action type="add" dev="ggregory" due-to="Gary Gregory">Add SystemUtils.IS_OS_MAC_OSX_SEQUOIA.</action>
+ <action type="add" dev="ggregory" due-to="Gary Gregory">Add BasicThreadFactory.builder() and deprecate BasicThreadFactory.Builder().</action>
+ <action type="add" dev="ggregory" due-to="Gary Gregory">Add BasicThreadFactory.daemon().</action>
<!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump org.apache.commons:commons-parent from 73 to 78 #1267, #1277, #1283, #1288, #1302.</action>
<action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">[site] Bump org.codehaus.mojo:taglist-maven-plugin from 3.1.0 to 3.2.1 #1300.</action>
diff --git a/src/main/java/org/apache/commons/lang3/concurrent/BasicThreadFactory.java b/src/main/java/org/apache/commons/lang3/concurrent/BasicThreadFactory.java
index aa0c9e24a..ff2a5d531 100644
--- a/src/main/java/org/apache/commons/lang3/concurrent/BasicThreadFactory.java
+++ b/src/main/java/org/apache/commons/lang3/concurrent/BasicThreadFactory.java
@@ -119,7 +119,10 @@ public class BasicThreadFactory implements ThreadFactory {
/**
* Constructs a new instance.
+ *
+ * @deprecated Use {@link BasicThreadFactory#builder()}.
*/
+ @Deprecated
public Builder() {
// empty
}
@@ -138,6 +141,16 @@ public class BasicThreadFactory implements ThreadFactory {
return factory;
}
+ /**
+ * Sets the daemon flag for the new {@link BasicThreadFactory} to {@code true} causing a new thread factory to create daemon threads.
+ *
+ * @return a reference to this {@link Builder}
+ * @since 3.18.0
+ */
+ public Builder daemon() {
+ return daemon(true);
+ }
+
/**
* Sets the daemon flag for the new {@link BasicThreadFactory}. If this
* flag is set to <strong>true</strong> the new thread factory will create daemon
@@ -221,6 +234,16 @@ public class BasicThreadFactory implements ThreadFactory {
}
}
+ /**
+ * Creates a new builder.
+ *
+ * @return a new builder.
+ * @since 3.18.0
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
/** A counter for the threads created by this factory. */
private final AtomicLong threadCounter;
diff --git a/src/test/java/org/apache/commons/lang3/concurrent/BasicThreadFactoryTest.java b/src/test/java/org/apache/commons/lang3/concurrent/BasicThreadFactoryTest.java
index 42f945105..d75aaf12b 100644
--- a/src/test/java/org/apache/commons/lang3/concurrent/BasicThreadFactoryTest.java
+++ b/src/test/java/org/apache/commons/lang3/concurrent/BasicThreadFactoryTest.java
@@ -53,8 +53,12 @@ public class BasicThreadFactoryTest extends AbstractLangTest {
final Thread t = new Thread();
EasyMock.expect(wrapped.newThread(r)).andReturn(t);
EasyMock.replay(wrapped, r);
- final BasicThreadFactory factory = builder.wrappedFactory(wrapped).daemon(
- flag).build();
+ // @formatter:off
+ final BasicThreadFactory factory = builder
+ .wrappedFactory(wrapped)
+ .daemon(flag)
+ .build();
+ // @formatter:on
assertSame(t, factory.newThread(r), "Wrong thread");
assertEquals(flag, t.isDaemon(), "Wrong daemon flag");
EasyMock.verify(wrapped, r);
@@ -75,7 +79,7 @@ public class BasicThreadFactoryTest extends AbstractLangTest {
@BeforeEach
public void setUp() {
- builder = new BasicThreadFactory.Builder();
+ builder = BasicThreadFactory.builder();
}
/**
@@ -87,6 +91,26 @@ public class BasicThreadFactoryTest extends AbstractLangTest {
checkFactoryDefaults(factory);
}
+ /**
+ * Tests the daemon() method of the builder.
+ */
+ @Test
+ public void testBuilderDaemon() {
+ builder.daemon();
+ assertTrue(builder.build().getDaemonFlag());
+ }
+
+ /**
+ * Tests the daemon() method of the builder.
+ */
+ @Test
+ public void testBuilderDaemonBoolean() {
+ builder.daemon(true);
+ assertTrue(builder.build().getDaemonFlag());
+ builder.daemon(false);
+ assertFalse(builder.build().getDaemonFlag());
+ }
+
/**
* Tests the reset() method of the builder.
*/
@@ -96,9 +120,13 @@ public class BasicThreadFactoryTest extends AbstractLangTest {
final Thread.UncaughtExceptionHandler exHandler = EasyMock
.createMock(Thread.UncaughtExceptionHandler.class);
EasyMock.replay(wrappedFactory, exHandler);
- builder.namingPattern(PATTERN).daemon(true).priority(
- Thread.MAX_PRIORITY).uncaughtExceptionHandler(exHandler)
- .wrappedFactory(wrappedFactory);
+ // @formatter:off
+ builder.namingPattern(PATTERN)
+ .daemon(true)
+ .priority(Thread.MAX_PRIORITY)
+ .uncaughtExceptionHandler(exHandler)
+ .wrappedFactory(wrappedFactory);
+ // @formatter:on
builder.reset();
final BasicThreadFactory factory = builder.build();
checkFactoryDefaults(factory);
@@ -111,8 +139,13 @@ public class BasicThreadFactoryTest extends AbstractLangTest {
*/
@Test
public void testBuilderResetAfterBuild() {
- builder.wrappedFactory(EasyMock.createNiceMock(ThreadFactory.class))
- .namingPattern(PATTERN).daemon(true).build();
+ // @formatter:off
+ builder
+ .wrappedFactory(EasyMock.createNiceMock(ThreadFactory.class))
+ .namingPattern(PATTERN)
+ .daemon(true)
+ .build();
+ // @formatter:on
checkFactoryDefaults(builder.build());
}