11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2010 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.util.concurrent; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.lang.Thread.UncaughtExceptionHandler; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.Executors; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.concurrent.ThreadFactory; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for ThreadFactoryBuilder. 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kurt Alfred Kluever 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Martin Buchholz 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ThreadFactoryBuilderTest extends TestCase { 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private final Runnable monitoredRunnable = new Runnable() { 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void run() { 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert completed = true; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final UncaughtExceptionHandler UNCAUGHT_EXCEPTION_HANDLER = 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new UncaughtExceptionHandler() { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void uncaughtException(Thread t, Throwable e) { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // No-op 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private ThreadFactoryBuilder builder; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private volatile boolean completed = false; 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void setUp() { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder = new ThreadFactoryBuilder(); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testThreadFactoryBuilder_defaults() throws InterruptedException { 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory threadFactory = builder.build(); 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread thread = threadFactory.newThread(monitoredRunnable); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkThreadPoolName(thread, 1); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread defaultThread = 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Executors.defaultThreadFactory().newThread(monitoredRunnable); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(defaultThread.isDaemon(), thread.isDaemon()); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(defaultThread.getPriority(), thread.getPriority()); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(defaultThread.getThreadGroup(), thread.getThreadGroup()); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(defaultThread.getUncaughtExceptionHandler(), 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.getUncaughtExceptionHandler()); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(completed); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.start(); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.join(); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(completed); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Creating a new thread from the same ThreadFactory will have the same 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // pool ID but a thread ID of 2. 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread thread2 = threadFactory.newThread(monitoredRunnable); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkThreadPoolName(thread2, 2); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.getName().substring(0, thread.getName().lastIndexOf('-')), 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread2.getName().substring(0, thread.getName().lastIndexOf('-'))); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Building again should give us a different pool ID. 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory threadFactory2 = builder.build(); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread thread3 = threadFactory2.newThread(monitoredRunnable); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkThreadPoolName(thread3, 1); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that( 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread2.getName().substring(0, thread.getName().lastIndexOf('-'))) 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .isNotEqualTo( 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread3.getName().substring(0, thread.getName().lastIndexOf('-'))); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static void checkThreadPoolName(Thread thread, int threadId) { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(thread.getName().matches("^pool-\\d+-thread-" + threadId + "$")); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNameFormat_custom() { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final String NAME_FORMAT = "super duper thread #%s"; 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory factory = builder.setNameFormat(NAME_FORMAT).build(); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 10; i++) { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(String.format(NAME_FORMAT, i), 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert factory.newThread(monitoredRunnable).getName()); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDaemon_false() { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory factory = builder.setDaemon(false).build(); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread thread = factory.newThread(monitoredRunnable); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(thread.isDaemon()); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDaemon_true() { 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory factory = builder.setDaemon(true).build(); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread thread = factory.newThread(monitoredRunnable); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(thread.isDaemon()); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPriority_custom() { 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = Thread.MIN_PRIORITY; i <= Thread.MAX_PRIORITY; i++) { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory factory = builder.setPriority(i).build(); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread thread = factory.newThread(monitoredRunnable); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(i, thread.getPriority()); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPriority_tooLow() { 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.setPriority(Thread.MIN_PRIORITY - 1); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPriority_tooHigh() { 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.setPriority(Thread.MAX_PRIORITY + 1); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testUncaughtExceptionHandler_custom() { 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(UNCAUGHT_EXCEPTION_HANDLER, 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.setUncaughtExceptionHandler(UNCAUGHT_EXCEPTION_HANDLER).build() 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .newThread(monitoredRunnable).getUncaughtExceptionHandler()); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuildMutateBuild() { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory factory1 = builder.setPriority(1).build(); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, factory1.newThread(monitoredRunnable).getPriority()); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory factory2 = builder.setPriority(2).build(); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, factory1.newThread(monitoredRunnable).getPriority()); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, factory2.newThread(monitoredRunnable).getPriority()); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuildTwice() { 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.build(); // this is allowed 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.build(); // this is *also* allowed 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuildMutate() { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory factory1 = builder.setPriority(1).build(); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, factory1.newThread(monitoredRunnable).getPriority()); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.setPriority(2); // change the state of the builder 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, factory1.newThread(monitoredRunnable).getPriority()); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testThreadFactory() throws InterruptedException { 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final String THREAD_NAME = "ludicrous speed"; 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final int THREAD_PRIORITY = 1; 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final boolean THREAD_DAEMON = false; 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ThreadFactory backingThreadFactory = new ThreadFactory() { 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Thread newThread(Runnable r) { 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread thread = new Thread(r); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.setName(THREAD_NAME); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.setPriority(THREAD_PRIORITY); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.setDaemon(THREAD_DAEMON); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.setUncaughtExceptionHandler(UNCAUGHT_EXCEPTION_HANDLER); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return thread; 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Thread thread = builder.setThreadFactory(backingThreadFactory).build() 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .newThread(monitoredRunnable); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(THREAD_NAME, thread.getName()); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(THREAD_PRIORITY, thread.getPriority()); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(THREAD_DAEMON, thread.isDaemon()); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(UNCAUGHT_EXCEPTION_HANDLER, 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.getUncaughtExceptionHandler()); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Thread.State.NEW, thread.getState()); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(completed); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.start(); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert thread.join(); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(completed); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNulls() throws Exception { 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester npTester = new NullPointerTester(); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert npTester.testAllPublicConstructors(ThreadFactoryBuilder.class); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert npTester.testAllPublicStaticMethods(ThreadFactoryBuilder.class); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert npTester.testAllPublicInstanceMethods(builder); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 207