Coverage Report - org.apache.giraph.utils.ThreadUtils
 
Classes in this File Line Coverage Branch Coverage Complexity
ThreadUtils
0%
0/24
0%
0/4
0
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *     http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing, software
 13  
  * distributed under the License is distributed on an "AS IS" BASIS,
 14  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  
  * See the License for the specific language governing permissions and
 16  
  * limitations under the License.
 17  
  */
 18  
 package org.apache.giraph.utils;
 19  
 
 20  
 import org.apache.log4j.Logger;
 21  
 
 22  
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 23  
 
 24  
 import java.util.concurrent.Callable;
 25  
 import java.util.concurrent.ExecutorService;
 26  
 import java.util.concurrent.Future;
 27  
 import java.util.concurrent.ThreadFactory;
 28  
 
 29  
 /**
 30  
  * Utility class for thread related functions.
 31  
  */
 32  
 public class ThreadUtils {
 33  
   /** Logger */
 34  0
   private static final Logger LOG = Logger.getLogger(ThreadUtils.class);
 35  
 
 36  
   /**
 37  
    * Utility class. Do not inherit or create objects.
 38  
    */
 39  0
   private ThreadUtils() { }
 40  
 
 41  
   /**
 42  
    * Creates new thread factory with specified thread name format.
 43  
    *
 44  
    * @param nameFormat defines naming format for threads created by
 45  
    *                   thread factory
 46  
    * @param exceptionHandler handles uncaught exceptions in all threads
 47  
    *                         produced created thread factory
 48  
    * @return new thread factory with specified thread name format and
 49  
    * exception handler.
 50  
    */
 51  
   public static ThreadFactory createThreadFactory(
 52  
       String nameFormat,
 53  
       Thread.UncaughtExceptionHandler exceptionHandler) {
 54  0
     ThreadFactoryBuilder builder = new ThreadFactoryBuilder().
 55  0
         setNameFormat(nameFormat).setDaemon(true);
 56  0
     if (exceptionHandler != null) {
 57  0
       builder.setUncaughtExceptionHandler(exceptionHandler);
 58  
     }
 59  0
     return builder.build();
 60  
   }
 61  
 
 62  
   /**
 63  
    * Creates new thread factory with specified thread name format.
 64  
    *
 65  
    * @param nameFormat defines naming format for threads created by
 66  
    *                   thread factory
 67  
    * @return new thread factory with specified thread name format
 68  
    */
 69  
   public static ThreadFactory createThreadFactory(String nameFormat) {
 70  0
     return createThreadFactory(nameFormat, null);
 71  
   }
 72  
 
 73  
   /**
 74  
    * Submit a callable to executor service, ensuring any exceptions are
 75  
    * caught with provided exception handler.
 76  
    *
 77  
    * When using submit(), UncaughtExceptionHandler which is set on ThreadFactory
 78  
    * isn't used, so we need this utility.
 79  
    *
 80  
    * @param executorService Executor service to submit callable to
 81  
    * @param callable Callable to submit
 82  
    * @param uncaughtExceptionHandler Handler for uncaught exceptions in callable
 83  
    * @param <T> Type of callable result
 84  
    * @return Future for callable
 85  
    */
 86  
   public static <T> Future<T> submitToExecutor(
 87  
       ExecutorService executorService,
 88  
       Callable<T> callable,
 89  
       Thread.UncaughtExceptionHandler uncaughtExceptionHandler) {
 90  0
     return executorService.submit(
 91  
         new LogStacktraceCallable<>(callable, uncaughtExceptionHandler));
 92  
   }
 93  
 
 94  
   /**
 95  
    * Start thread with specified name and runnable, and make it daemon
 96  
    *
 97  
    * @param threadName Name of the thread
 98  
    * @param runnable Runnable to execute
 99  
    * @return Thread
 100  
    */
 101  
   public static Thread startThread(Runnable runnable, String threadName) {
 102  0
     Thread thread = new Thread(runnable, threadName);
 103  0
     thread.setDaemon(true);
 104  0
     thread.start();
 105  0
     return thread;
 106  
   }
 107  
 
 108  
   /**
 109  
    * Start thread with specified name, runnable and exception handler, and make
 110  
    * it daemon
 111  
    *
 112  
    * @param runnable Runnable to execute
 113  
    * @param threadName Name of the thread
 114  
    * @param handler Exception handler
 115  
    * @return Thread
 116  
    */
 117  
   public static Thread startThread(Runnable runnable, String threadName,
 118  
                                    Thread.UncaughtExceptionHandler handler) {
 119  0
     Thread thread = new Thread(runnable, threadName);
 120  0
     thread.setUncaughtExceptionHandler(handler);
 121  0
     thread.setDaemon(true);
 122  0
     thread.start();
 123  0
     return thread;
 124  
   }
 125  
 
 126  
   /**
 127  
    * Sleep for specified milliseconds, logging and ignoring interrupted
 128  
    * exceptions
 129  
    *
 130  
    * @param millis How long to sleep for
 131  
    * @return Whether the sleep was successful or the thread was interrupted
 132  
    */
 133  
   public static boolean trySleep(long millis) {
 134  
     try {
 135  0
       Thread.sleep(millis);
 136  0
       return true;
 137  0
     } catch (InterruptedException e) {
 138  0
       if (LOG.isInfoEnabled()) {
 139  0
         LOG.info("Thread interrupted");
 140  
       }
 141  0
       return false;
 142  
     }
 143  
   }
 144  
 }