package chat.message;
|
|
import java.util.concurrent.Executors;
|
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
public class MessageRunner {
|
|
private static final Logger LOG = LoggerFactory.getLogger(MessageRunner.class);
|
//private ScheduledExecutorService mScheduledExecutorService = Executors.newScheduledThreadPool(10);
|
private ScheduledExecutorService executor;
|
private final AtomicInteger runCounter;
|
|
public MessageRunner(ScheduledExecutorService executor) {
|
this.runCounter = new AtomicInteger();
|
this.executor = executor;
|
}
|
|
// private ThreadFactory threadFactory = new ThreadFactory() {
|
// @Override
|
// public Thread newThread(final Runnable r) {
|
// return new Thread() {
|
// @Override
|
// public void run() {
|
// r.run();
|
// }
|
// };
|
// }
|
// };
|
|
public void execute(Runnable task) {
|
int startCount = runCounter.incrementAndGet();
|
LOG.debug("Submit task and current task count {}", startCount);
|
final long startTime = System.currentTimeMillis();
|
executor.execute(() -> {
|
try {
|
task.run();
|
} finally {
|
int endCount = runCounter.decrementAndGet();
|
LOG.debug("Finish task and current task count {} use time {}", endCount, System.currentTimeMillis()-startTime);
|
}
|
});
|
}
|
|
public void shutdown() {
|
executor.isShutdown();
|
}
|
|
// public void publishToMembers(MessageRecord message, List<Member> memberList, User sender) {
|
// mScheduledExecutorService.schedule(threadFactory.newThread(new Runnable() {
|
// @Override
|
// public void run() {
|
// exeMessage(user);
|
// }
|
// }), 100, TimeUnit.MILLISECONDS);
|
// }
|
}
|