A browser with JavaScript enabled is required for this page to operate properly.
Documentation

The Java™ Tutorials
Trail: Essential Java Classes
Lesson: Concurrency
« PreviousTrailNext »

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available.
See Dev.java for updated tutorials taking advantage of the latest releases.
See Java Language Changes for a summary of updated language features in Java SE 9 and subsequent releases.
See JDK Release Notes for information about new features, enhancements, and removed or deprecated options for all JDK releases.

Questions and Exercises: Concurrency

Questions

  1. Can you pass a Thread object to Executor.execute? Would such an invocation make sense?

Exercises

  1. Compile and run BadThreads.java:
    public class BadThreads {
     static String message;
     private static class CorrectorThread
     extends Thread {
     public void run() {
     try {
     sleep(1000); 
     } catch (InterruptedException e) {}
     // Key statement 1:
     message = "Mares do eat oats."; 
     }
     }
     public static void main(String args[])
     throws InterruptedException {
     (new CorrectorThread()).start();
     message = "Mares do not eat oats.";
     Thread.sleep(2000);
     // Key statement 2:
     System.out.println(message);
     }
    }
    

    The application should print out "Mares do eat oats." Is it guaranteed to always do this? If not, why not? Would it help to change the parameters of the two invocations of Sleep? How would you guarantee that all changes to message will be visible in the main thread?

  2. Modify the producer-consumer example in Guarded Blocks to use a standard library class instead of the Drop class.

Check your answers.

« PreviousTrailNext »

Previous page: For Further Reading
Next page: The Platform Environment

AltStyle によって変換されたページ (->オリジナル) /