Chapter 11
Multithreaded Programming
Java provides built-in
support for multithreaded programming.
A multithreaded program contains two or more parts that can run concurrently.
Each part of such a program is called a thread,
and each thread defines a separate path of execution. Thus, multithreading is a specialized form of multitasking.
You are almost certainly acquainted with multitasking because it is supported by virtually all modern operating systems. However, there are two distinct types of multitasking: process-based and thread-based. It is important to understand the difference between the two. For many readers, process-based multitasking is the more familiar form. A process is, in essence, a program that is executing. Thus, process-based multitasking is the feature that allows your computer to run two or more programs concurrently. For example, process-based multitasking enables you to run the Java compiler at the same time that you are using a text editor or visiting a web site. In process-based multitasking, a program is the smallest unit of code that can be dispatched by the scheduler.
In a thread-based multitasking environment, the thread is the smallest
unit of dispatchable code. This means that a single program can perform two or
more tasks simultaneously. For instance, a text editor can format text at the
same time that it is printing, as long as these two actions are being performed
by two separate threads. Thus, process-based multitasking deals with the “big
picture,” and thread-based multitasking handles the details.
Multitasking threads require
less overhead than multitasking processes. Processes are heavyweight tasks that
require their own separate address spaces. Interprocess communication is
expensive and limited. Context switching from one process to another is also
costly. Threads, on the other hand, are lighter weight. They share the same
address space and cooperatively share the same heavyweight process. Interthread
communication is inexpensive, and context switching from one thread to the next
is lower in cost. While Java programs make use of process-based multitasking
environments, process-based multitasking is not under Java’s control. However,
multithreaded multitasking is.
Multithreading enables you to
write efficient programs that make maximum use of the processing power
available in the system. One important way multithreading achieves this is by
keeping idle time to a minimum. This is especially important for the
interactive, networked environment in which Java operates because idle time is
common. For example, the transmission rate of data over a network is much
slower than the rate at which the computer can process it. Even local file
system resources are read and written at a much slower pace than they can be
processed by the CPU. And, of course, user input is much slower than the
computer. In a single-threaded environment, your program has to wait for each
of these tasks to finish before it can proceed to the next one—even though most
of the time the program is idle, waiting for input. Multithreading helps you
reduce this idle time because another thread can run when one is waiting.
If you have programmed for
operating systems such as Windows, then you are already familiar with
multithreaded programming. However, the fact that Java manages threads makes
multithreading especially convenient because many of the details are handled
for you.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.