Java Reference
In-Depth Information
catch (InterruptedException ie)
Listing 4-24 introduces a main() method with a local class named Stop-
pableThread thatsubclasses Thread . StoppableThread declaresa stopped
fieldinitializedto false ,a stopThread() methodthatsetsthisfieldto true ,and
a run() methodwhoseinfiniteloopchecks stopped oneachloopiterationtoseeif
its value has changed to true .
After instantiating StoppableThread , the default main thread starts the thread
associated with this Thread object. It then sleeps for one second and calls Stop-
pableThread 's stop() method before dying. When you run this application on a
single-processor/single-core machine, you will probably observe the application stop-
You might not see this stoppage when the application runs on a multiprocessor ma-
chine or a uniprocessor machine with multiple cores. For performance reasons, each
processor or core probably has its own cache with its own copy of stopped . When
one thread modifies its copy of this field, the other thread's copy of stopped is not
Listing4-25 refactors Listing4-24 toguaranteethattheapplicationwillruncorrectly
on all kinds of machines.
Listing 4-25. Guaranteed stoppage on a multiprocessor/multicore machine
class ThreadStopping
public static void main(String[] args)
class StoppableThread extends Thread
private boolean stopped = false;
public void run()
Search WWH ::

Custom Search