Introduction
The Java Concurrency API provides a lot of interfaces and classes to implement concurrent applications. They provide low-level mechanisms, such as the Thread
class, the Runnable
or Callable
interfaces, or the synchronized
keyword. They also provide high-level mechanisms, such as the Executor
framework and the fork/join framework added in the Java 7 release, or the Stream
framework added in Java 8, to process big sets of data. Despite this, you may find yourself developing a program where the default configuration and/or implementation of the Java API doesn't meet your needs.
In this case, you may need to implement your own custom concurrent utilities, based on the ones provided by Java. Basically, you can:
- Implement an interface to provide the functionality defined by that interface, for example, the
ThreadFactory
interface. - Override some methods of a class to adapt its behavior to your needs. For example, overriding the
onAdvance()
method of thePhaser
class that, by default,...