Added UniversalVesAdapter in the Mapper
[dcaegen2/services/mapper.git] / UniversalVesAdapter / src / main / java / org / onap / universalvesadapter / utils / ParallelTasks.java
1 /*
2 * ============LICENSE_START=======================================================
3 * ONAP : DCAE
4 * ================================================================================
5 * Copyright 2018 TechMahindra
6 *=================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 *     http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
19 */
20 package org.onap.universalvesadapter.utils;
21
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.concurrent.CountDownLatch;
25 import java.util.concurrent.ExecutorService;
26 import java.util.concurrent.Executors;
27
28 /**
29  * 
30  * Utility class to execute parallel tasks
31  * 
32  * @author kmalbari
33  *
34  */
35 public class ParallelTasks
36 {
37     private final Collection<Runnable> tasks = new ArrayList<Runnable>();
38
39     public ParallelTasks()
40     {
41     }
42
43     /**
44      * 
45      * Add task to be executed in parallel
46      * 
47      * @param task
48      */
49     public void add(final Runnable task)
50     {
51         tasks.add(task);
52     }
53
54     /**
55      * starts all the added tasks in parallel
56      * 
57      * @throws InterruptedException
58      */
59     public void startParallelTasks() throws InterruptedException
60     {
61         final ExecutorService threads = Executors.newFixedThreadPool(Runtime.getRuntime()
62                 .availableProcessors());
63         try
64         {
65             final CountDownLatch latch = new CountDownLatch(tasks.size());
66             for (final Runnable task : tasks)
67                 threads.execute(new Runnable() {
68                     public void run()
69                     {
70                         try
71                         {
72                             task.run();
73                         }
74                         finally
75                         {
76                             latch.countDown();
77                         }
78                     }
79                 });
80             latch.await();
81         }
82         finally
83         {
84             threads.shutdown();
85         }
86     }
87 }