Import atomix/{storage,utils}
[controller.git] / third-party / atomix / utils / src / main / java / io / atomix / utils / concurrent / BlockingAwareThreadPoolContextFactory.java
1 /*
2  * Copyright 2017-present Open Networking Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package io.atomix.utils.concurrent;
17
18 import org.slf4j.Logger;
19
20 import java.util.concurrent.Executors;
21 import java.util.concurrent.ScheduledExecutorService;
22 import java.util.concurrent.ThreadFactory;
23
24 import static io.atomix.utils.concurrent.Threads.namedThreads;
25
26 /**
27  * Thread pool context factory.
28  */
29 public class BlockingAwareThreadPoolContextFactory implements ThreadContextFactory {
30   private final ScheduledExecutorService executor;
31
32   public BlockingAwareThreadPoolContextFactory(String name, int threadPoolSize, Logger logger) {
33     this(threadPoolSize, namedThreads(name, logger));
34   }
35
36   public BlockingAwareThreadPoolContextFactory(int threadPoolSize, ThreadFactory threadFactory) {
37     this(Executors.newScheduledThreadPool(threadPoolSize, threadFactory));
38   }
39
40   public BlockingAwareThreadPoolContextFactory(ScheduledExecutorService executor) {
41     this.executor = executor;
42   }
43
44   @Override
45   public ThreadContext createContext() {
46     return new BlockingAwareThreadPoolContext(executor);
47   }
48
49   @Override
50   public void close() {
51     executor.shutdownNow();
52   }
53 }