Java Reference
In-Depth Information
thread pool. None of these issues needs to be directly addressed when using the parallel
streams library.
Example 6-4. Simulating dice rolls by manually implementing threading
public
public class
class ManualDiceRolls
ManualDiceRolls {
private
private static
static final
final int
int N = 100000000 ;
private
private final
final double
double fraction ;
private
private final
final Map < Integer , Double > results ;
private
private final
final int
int numberOfThreads ;
private
private final
final ExecutorService executor ;
private
private final
final int
int workPerThread ;
public
public static
void main ( String [] args ) {
ManualDiceRolls roles = new
static void
new ManualDiceRolls ();
roles . simulateDiceRoles ();
}
public
public ManualDiceRolls () {
fraction = 1.0 / N ;
results = new
new ConcurrentHashMap <>();
numberOfThreads = Runtime . getRuntime (). availableProcessors ();
executor = Executors . newFixedThreadPool ( numberOfThreads );
workPerThread = N / numberOfThreads ;
}
public
public void
void simulateDiceRoles () {
List < Future <?>> futures = submitJobs ();
awaitCompletion ( futures );
printResults ();
}
private
private void
void printResults () {
results . entrySet ()
. forEach ( System . out :: println );
}
private
private List < Future <?>> submitJobs () {
List < Future <?>> futures = new
new ArrayList <>();
for
for ( int
int i = 0 ; i < numberOfThreads ; i ++) {
futures . add ( executor . submit ( makeJob ()));
}
return
return futures ;
}
Search WWH ::




Custom Search