Murat Parlakisik
Committed by Gerrit Code Review

Shared Executors implementation , (ONOS-1302)

Change-Id: I7fe5e415bf605c198d3bb42328477aef396c5c89
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
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 +
17 +package org.onlab.util;
18 +
19 +
20 +import java.util.concurrent.ExecutorService;
21 +import java.util.concurrent.Executors;
22 +
23 +import static org.onlab.util.Tools.groupedThreads;
24 +
25 +/**
26 + * SharedExecutors is designed to use thread pool for applications.
27 + * SharedExecutors is recommended for applications instead of creating new thread groups.
28 + */
29 +public final class SharedExecutors {
30 +
31 + private static int numberOfThreads = 30;
32 +
33 + private static ExecutorService singleThreadExecutor =
34 + Executors.newSingleThreadExecutor(groupedThreads("onos/shared", "onos-single-executor"));
35 +
36 + private static ExecutorService poolThreadExecutor =
37 + Executors.newFixedThreadPool(numberOfThreads, groupedThreads("onos/shared", "onos-pool-executor-%d"));
38 +
39 + private static java.util.Timer sharedTimer =
40 + new java.util.Timer("onos-shared-timer");
41 +
42 +
43 +
44 + private SharedExecutors() {
45 +
46 + }
47 +
48 + /**
49 + * Returns the single thread executor.
50 + *
51 + * @return shared single thread executor
52 + */
53 + public static ExecutorService getSingleThreadExecutor() {
54 + return singleThreadExecutor;
55 + }
56 + /**
57 + * Returns the pool thread executor.
58 + *
59 + * @return shared executor pool
60 + */
61 + public static ExecutorService getPoolThreadExecutor() {
62 + return poolThreadExecutor;
63 + }
64 + /**
65 + * Returns the pool timer.
66 + *
67 + * @return shared timer
68 + */
69 + public static java.util.Timer getTimer() {
70 + return sharedTimer;
71 + }
72 +
73 +
74 +
75 +
76 +}
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
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 org.onlab.util;
17 +
18 +import org.junit.Test;
19 +
20 +import java.util.concurrent.ExecutorService;
21 +
22 +import static org.junit.Assert.*;
23 +
24 +/**
25 + * Tests of the SharedExecutors Test.
26 + */
27 +public class SharedExecutorsTest {
28 +
29 + @Test
30 + public void singleThread() {
31 + ExecutorService a = SharedExecutors.getSingleThreadExecutor();
32 + assertNotNull("ExecutorService must not be null", a);
33 + ExecutorService b = SharedExecutors.getSingleThreadExecutor();
34 + assertSame("factories should be same", a, b);
35 +
36 + }
37 +
38 + @Test
39 + public void poolThread() {
40 + ExecutorService a = SharedExecutors.getPoolThreadExecutor();
41 + assertNotNull("ExecutorService must not be null", a);
42 + ExecutorService b = SharedExecutors.getPoolThreadExecutor();
43 + assertSame("factories should be same", a, b);
44 +
45 + }
46 +
47 + @Test
48 + public void timer() {
49 + java.util.Timer a = SharedExecutors.getTimer();
50 + assertNotNull("Timer must not be null", a);
51 + java.util.Timer b = SharedExecutors.getTimer();
52 + assertSame("factories should be same", a, b);
53 + }
54 +}