BoYiZhang
4 years ago
committed by
GitHub
14 changed files with 292 additions and 487 deletions
@ -1,190 +0,0 @@ |
|||||||
/* |
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
|
||||||
* contributor license agreements. See the NOTICE file distributed with |
|
||||||
* this work for additional information regarding copyright ownership. |
|
||||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
|
||||||
* (the "License"); you may not use this file except in compliance with |
|
||||||
* the License. You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.apache.dolphinscheduler.common.threadutils; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.thread.Stopper; |
|
||||||
import org.apache.dolphinscheduler.common.thread.ThreadPoolExecutors; |
|
||||||
import org.apache.dolphinscheduler.common.thread.ThreadUtils; |
|
||||||
import org.junit.Test; |
|
||||||
import org.slf4j.Logger; |
|
||||||
import org.slf4j.LoggerFactory; |
|
||||||
|
|
||||||
import java.util.Calendar; |
|
||||||
import java.util.concurrent.*; |
|
||||||
|
|
||||||
import static org.junit.Assert.*; |
|
||||||
|
|
||||||
|
|
||||||
public class ThreadUtilsTest { |
|
||||||
private static final Logger logger = LoggerFactory.getLogger(ThreadUtilsTest.class); |
|
||||||
/** |
|
||||||
* create a naming thread |
|
||||||
*/ |
|
||||||
@Test |
|
||||||
public void testNewDaemonFixedThreadExecutor() { |
|
||||||
// create core size and max size are all 3
|
|
||||||
ExecutorService testExec = ThreadUtils.newDaemonFixedThreadExecutor("test-exec-thread",10); |
|
||||||
|
|
||||||
for (int i = 0; i < 19; i++) { |
|
||||||
final int index = i; |
|
||||||
testExec.submit(() -> { |
|
||||||
System.out.println("do some work index " + index); |
|
||||||
}); |
|
||||||
} |
|
||||||
assertFalse(testExec.isShutdown()); |
|
||||||
testExec.shutdownNow(); |
|
||||||
assertTrue(testExec.isShutdown()); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* test schedulerThreadExecutor as for print time in scheduler |
|
||||||
* default check thread is 1 |
|
||||||
*/ |
|
||||||
@Test |
|
||||||
public void testNewDaemonScheduleThreadExecutor() { |
|
||||||
|
|
||||||
ScheduledExecutorService scheduleService = ThreadUtils.newDaemonThreadScheduledExecutor("scheduler-thread", 1); |
|
||||||
Calendar start = Calendar.getInstance(); |
|
||||||
Calendar globalTimer = Calendar.getInstance(); |
|
||||||
globalTimer.set(2019, Calendar.DECEMBER, 1, 0, 0, 0); |
|
||||||
// current
|
|
||||||
Calendar end = Calendar.getInstance(); |
|
||||||
end.set(2019, Calendar.DECEMBER, 1, 0, 0, 3); |
|
||||||
Runnable schedulerTask = new Runnable() { |
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
start.set(2019, Calendar.DECEMBER, 1, 0, 0, 0); |
|
||||||
int index = 0; |
|
||||||
// send heart beat work
|
|
||||||
while (start.getTime().getTime() <= end.getTime().getTime()) { |
|
||||||
System.out.println("worker here"); |
|
||||||
System.out.println(index ++); |
|
||||||
start.add(Calendar.SECOND, 1); |
|
||||||
globalTimer.add(Calendar.SECOND, 1); |
|
||||||
} |
|
||||||
System.out.println("time is " + System.currentTimeMillis()); |
|
||||||
} |
|
||||||
}; |
|
||||||
scheduleService.scheduleAtFixedRate(schedulerTask, 2, 10, TimeUnit.SECONDS); |
|
||||||
assertFalse(scheduleService.isShutdown()); |
|
||||||
try { |
|
||||||
Thread.sleep(60000); |
|
||||||
} catch (InterruptedException e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
scheduleService.shutdownNow(); |
|
||||||
assertTrue(scheduleService.isShutdown()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* test stopper is working normal |
|
||||||
*/ |
|
||||||
@Test |
|
||||||
public void testStopper() { |
|
||||||
assertTrue(Stopper.isRunning()); |
|
||||||
Stopper.stop(); |
|
||||||
assertTrue(Stopper.isStopped()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* test threadPoolExecutors with 3 workers and current each 5 tasks |
|
||||||
* @throws InterruptedException |
|
||||||
*/ |
|
||||||
@Test |
|
||||||
public void testThreadInfo() throws InterruptedException { |
|
||||||
ThreadPoolExecutors workers = ThreadPoolExecutors.getInstance("worker", 3); |
|
||||||
for (int i = 0; i < 5; ++i ) { |
|
||||||
int index = i; |
|
||||||
workers.execute(() -> { |
|
||||||
for (int j = 0; j < 10; ++j) { |
|
||||||
try { |
|
||||||
Thread.sleep(1000); |
|
||||||
System.out.printf("worker %d is doing the task", index); |
|
||||||
System.out.println(); |
|
||||||
workers.printStatus(); |
|
||||||
} catch (InterruptedException e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
workers.submit(() -> { |
|
||||||
for (int j = 0; j < 10; ++j) { |
|
||||||
try { |
|
||||||
Thread.sleep(1000); |
|
||||||
System.out.printf("worker_2 %d is doing the task", index); |
|
||||||
System.out.println(); |
|
||||||
workers.printStatus(); |
|
||||||
} catch (InterruptedException e) { |
|
||||||
e.printStackTrace(); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
Thread.sleep(50001); |
|
||||||
workers.shutdown(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* test a single daemon thread pool |
|
||||||
*/ |
|
||||||
@Test |
|
||||||
public void testNewDaemonSingleThreadExecutor() { |
|
||||||
ExecutorService threadTest = ThreadUtils.newDaemonSingleThreadExecutor("thread_test"); |
|
||||||
threadTest.execute(() -> { |
|
||||||
for (int i = 0; i < 100; ++i) { |
|
||||||
System.out.println("daemon working "); |
|
||||||
} |
|
||||||
|
|
||||||
}); |
|
||||||
assertFalse(threadTest.isShutdown()); |
|
||||||
threadTest.shutdownNow(); |
|
||||||
assertTrue(threadTest.isShutdown()); |
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testNewDaemonCachedThreadPool() { |
|
||||||
|
|
||||||
ThreadPoolExecutor threadPoolExecutor = ThreadUtils.newDaemonCachedThreadPool("threadTest-"); |
|
||||||
Thread thread1 = threadPoolExecutor.getThreadFactory().newThread(() -> { |
|
||||||
for (int i = 0; i < 10; ++i) { |
|
||||||
System.out.println("this task is with index " + i ); |
|
||||||
} |
|
||||||
}); |
|
||||||
assertTrue(thread1.getName().startsWith("threadTest-")); |
|
||||||
assertFalse(threadPoolExecutor.isShutdown()); |
|
||||||
threadPoolExecutor.shutdown(); |
|
||||||
assertTrue(threadPoolExecutor.isShutdown()); |
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void testNewDaemonCachedThreadPoolWithThreadNumber() { |
|
||||||
ThreadPoolExecutor threadPoolExecutor = ThreadUtils.newDaemonCachedThreadPool("threadTest--", 3, 10); |
|
||||||
for (int i = 0; i < 10; ++ i) { |
|
||||||
threadPoolExecutor.getThreadFactory().newThread(() -> { |
|
||||||
assertEquals(3, threadPoolExecutor.getActiveCount()); |
|
||||||
System.out.println("this task is first work to do"); |
|
||||||
}); |
|
||||||
} |
|
||||||
assertFalse(threadPoolExecutor.isShutdown()); |
|
||||||
threadPoolExecutor.shutdown(); |
|
||||||
assertTrue(threadPoolExecutor.isShutdown()); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue