- private void executeAndWait(SimpleAsyncTaskExecutor executor, Runnable task, Object monitor) {
- synchronized (monitor) {
- executor.execute(task);
- try {
- monitor.wait();
- }
- catch (InterruptedException ignored) {
- }
- }
- }
- private static abstract class AbstractNotifyingRunnable implements Runnable {
- private final Object monitor;
- protected AbstractNotifyingRunnable(Object monitor) {
- this.monitor = monitor;
- }
- @Override
- public final void run() {
- synchronized (this.monitor) {
- try {
- doRun();
- }
- finally {
- this.monitor.notifyAll();
- }
- }
- }
- protected abstract void doRun();
- }
- private static final class ThreadNameHarvester extends AbstractNotifyingRunnable {
- private String threadName;
- protected ThreadNameHarvester(Object monitor) {
- super(monitor);
- }
- public String getThreadName() {
- return this.threadName;
- }
- @Override
- protected void doRun() {
- this.threadName = Thread.currentThread().getName();
- System.out.println(threadName);
- }
- }
private void executeAndWait(SimpleAsyncTaskExecutor executor, Runnable task, Object monitor) {
synchronized (monitor) {
executor.execute(task);
try {
monitor.wait();
}
catch (InterruptedException ignored) {
}
}
}
private static abstract class AbstractNotifyingRunnable implements Runnable {
private final Object monitor;
protected AbstractNotifyingRunnable(Object monitor) {
this.monitor = monitor;
}
@Override
public final void run() {
synchronized (this.monitor) {
try {
doRun();
}
finally {
this.monitor.notifyAll();
}
}
}
protected abstract void doRun();
}
private static final class ThreadNameHarvester extends AbstractNotifyingRunnable {
private String threadName;
protected ThreadNameHarvester(Object monitor) {
super(monitor);
}
public String getThreadName() {
return this.threadName;
}
@Override
protected void doRun() {
this.threadName = Thread.currentThread().getName();
System.out.println(threadName);
}
}
进行测试,代码如下:
- @Test
- public void testThreadFactoryOverridesDefaults() throws Exception {
- final Object monitor = new Object();
- SimpleAsyncTaskExecutor executor = new SimpleAsyncTaskExecutor(new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- return new Thread(r, "test");
- }
- });
- ThreadNameHarvester task = new ThreadNameHarvester(monitor);
- executeAndWait(executor, task, monitor);
- assertTrue(task.getThreadName().equals("test"));
- }
@Test
public void testThreadFactoryOverridesDefaults() throws Exception {
final Object monitor = new Object();
SimpleAsyncTaskExecutor executor = new SimpleAsyncTaskExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "test");
}
});
ThreadNameHarvester task = new ThreadNameHarvester(monitor);
executeAndWait(executor, task, monitor);
assertTrue(task.getThreadName().equals("test"));
}
转载自http://blog.youkuaiyun.com/mazhimazh/