BAEL-1071 Runnable vs Callable in Java (#2513)

This commit is contained in:
baljeet20 2017-08-29 01:01:31 +05:30 committed by Grzegorz Piwowarek
parent 73526dd0a8
commit 904a740643
2 changed files with 78 additions and 0 deletions

View File

@ -0,0 +1,30 @@
package com.baeldung.concurrent.callable;
import java.util.concurrent.Callable;
public class FactorialTask implements Callable<Integer> {
int number;
public FactorialTask(int number) {
this.number = number;
}
public Integer call() throws InvalidParamaterException {
int fact=1;
if(number < 0)
throw new InvalidParamaterException("Number must be positive");
for(int count=number;count>1;count--){
fact=fact * count;
}
return fact;
}
private class InvalidParamaterException extends Exception {
public InvalidParamaterException(String message) {
super(message);
}
}
}

View File

@ -0,0 +1,48 @@
package com.baeldung.concurrent.callable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import static junit.framework.Assert.assertEquals;
public class FactorialTaskManualTest {
private ExecutorService executorService;
@Before
public void setup(){
executorService = Executors.newSingleThreadExecutor();
}
@Test
public void whenTaskSubmitted_ThenFutureResultObtained() throws ExecutionException, InterruptedException {
FactorialTask task = new FactorialTask(5);
Future<Integer> future= executorService.submit(task);
assertEquals(120,future.get().intValue());
}
@Test(expected = ExecutionException.class)
public void whenException_ThenCallableThrowsIt() throws ExecutionException, InterruptedException {
FactorialTask task = new FactorialTask(-5);
Future<Integer> future= executorService.submit(task);
Integer result=future.get().intValue();
}
@Test
public void whenException_ThenCallableDoesntThrowsItIfGetIsNotCalled(){
FactorialTask task = new FactorialTask(-5);
Future<Integer> future= executorService.submit(task);
assertEquals(false,future.isDone());
}
@After
public void cleanup(){
executorService.shutdown();
}
}