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
;
}