# 问题和练习：并发

> 原文： [https://docs.oracle.com/javase/tutorial/essential/concurrency/QandE/questions.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/QandE/questions.html)

## 问题

1.  你能把`Thread`对象传递给`Executor.execute`吗？这样的调用会有意义吗？

## 演习

1.  Compile and run [``BadThreads.java``](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);
        }
    }

    ```

    应用程序应打印出“Mares do eat oat”。是否保证始终这样做？如果没有，为什么不呢？是否有助于更改`Sleep`的两次调用的参数？您如何保证在主线程中可以看到`message`的所有更改？

2.  修改 [Guarded Blocks](../guardmeth.html) 中的生产者 - 消费者示例，以使用标准库类而不是`Drop`类。

[检查你的答案。](answers.html)