Package ch.inftec.ju.util.libs

Source Code of ch.inftec.ju.util.libs.JavaConcurrencyTest

package ch.inftec.ju.util.libs;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Test;

import ch.inftec.ju.util.JuException;

public class JavaConcurrencyTest {
  private static ExecutorService executor = Executors.newSingleThreadExecutor();
 
  @AfterClass
  public static void shutdownExecutor() {
    executor.shutdown();
  }
 
  @Test
  public void futureTask_returningResult() throws Exception {
    FutureTask<String> futureTask = new FutureTask<String>(new Callable<String>() {
      @Override
      public String call() throws Exception {
        return "FutureTask result";
      }
    });
   
    executor.execute(futureTask);
   
    Assert.assertEquals("FutureTask result", futureTask.get());
    Assert.assertTrue(futureTask.isDone());
    Assert.assertFalse(futureTask.isCancelled());
  }
 
  @Test
  public void futureTask_throwingException() throws Exception {
    FutureTask<String> futureTask = new FutureTask<String>(new Callable<String>() {
      @Override
      public String call() throws Exception {
        throw new JuException("Failing...");
      }
    });
   
    executor.execute(futureTask);
   
    try {
      futureTask.get();
    } catch (ExecutionException ex) {
      Assert.assertEquals("Failing...", ex.getCause().getMessage());
     
      Assert.assertTrue(futureTask.isDone());
      Assert.assertFalse(futureTask.isCancelled());
    }
  }
 
  @Test
  public void futureTask_canBeCancelled() throws Exception {
    FutureTask<String> futureTask = new FutureTask<String>(new Callable<String>() {
      @Override
      public String call() throws Exception {
        while (true) {} // Run endlessly
      }
    });
   
    executor.execute(futureTask);
    futureTask.cancel(true);
   
    Assert.assertTrue(futureTask.isDone());
    Assert.assertTrue(futureTask.isCancelled());
  }
}
TOP

Related Classes of ch.inftec.ju.util.libs.JavaConcurrencyTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.