CHAPTER 28
The Concurrency Utilities
From the start, Java has
provided built-in support for multithreading and synchronization. For example,
new threads can be created by implementing Runnable
or by extending Thread;
synchronization is available by use of the
synchronized keyword; and interthread
communication is supported by the wait(
) and notify( ) methods that are
defined by Object. In general, this
built-in support for multithreading was one of Java’s most important
innovations and is still one of its major strengths.
However, as conceptually pure
as Java’s original support for multithreading is, it is not ideal for all
applications—especially those that make intensive use of multiple threads. For
example, the original multithreading support does not provide several
high-level features, such as semaphores, thread pools, and execution managers,
that facilitate the creation of intensively concurrent programs.
It is important to explain at
the outset that many Java programs make use of multithreading and are,
therefore, “concurrent.” For example, many applets and servlets use
multithreading. However, as it is used in this chapter, the term concurrent program refers to a program
that makes extensive, integral use of
concurrently executing threads. An example of such a program is one that uses
separate threads to simultaneously compute the partial results of a larger
computation. Another example is a program that coordinates the activities of
several threads, each of which seeks access to information in a database. In
this case, read-only accesses might be handled differently from those that
require read/write capabilities.
To begin to handle the needs
of a concurrent program, JDK 5 added the concurrency
utilities, also commonly referred to
as the concurrent API. The original
set of concurrency utilities supplied
many features that had long been wanted by programmers who develop concurrent
applications. For example, it offered synchronizers (such as the semaphore),
thread pools, execution managers, locks, several concurrent collections, and a
streamlined way to use threads to obtain computational results.
Although the original
concurrent API was impressive in its own right, it was significantly expanded
by JDK 7. The most important addition was the Fork/Join Framework. The Fork/Join Framework facilitates the
creation of programs that make use of multiple processors (such as those found
in multicore systems). Thus, it streamlines the development of programs in which
two or more pieces execute with true simultaneity (that is, true parallel
execution), not just time-slicing. As you can easily imagine, parallel
execution can dramatically increase the speed of certain operations. Because
multicore systems are now commonplace, the inclusion of the Fork/Join Framework
was as timely as it was powerful. With the release of JDK 8, the Fork/Join
Framework was further enhanced.
In addition, JDK 8 included
some new features related to other parts of the concurrent API. Thus, the
concurrent API continues to evolve and expand to meet the needs of the
contemporary computing environment.
The original concurrent API
was quite large, and the additions made by JDK 7 and JDK 8 have increased its
size substantially. As you might expect, many of the issues surrounding the
concurrency utilities are quite complex. It is beyond the scope of this book to
discuss all of its facets. The preceding notwithstanding, it is important for
all programmers to have a general, working knowledge of key aspects of the
concurrent API. Even in programs that are not intensively parallel, features
such as synchronizers, callable threads, and executors, are applicable to a
wide variety of situations. Perhaps most importantly, because of the rise of
multicore computers, solutions involving the Fork/Join Framework are becomming
more common. For these reasons, this chapter presents an overview of several
core features defined by the concurrency utilities and shows a number of
examples that demonstrate their use. It concludes with an introduction to the
Fork/Join Framework.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.