Questions
- Can you pass a
Thread
object toExecutor.execute
? Would such an invocation make sense?
Exercises
- 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 tomessage
will be visible in the main thread?- Modify the producer-consumer example in Guarded Blocks to use a standard library class instead of the
Drop
class.