8

次のコードが JDK7 では CloneNotSupportedException をスローするのに、JDK6 ではスローしないのはなぜですか?

public class DemoThread extends Thread implements Cloneable {

    /**
     * @param args
     */
    public static void main(String[] args) {
        DemoThread t = new DemoThread();
        t.cloned();
    }

    public DemoThread cloned()
    {
        try {
            return (DemoThread) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }

}
4

2 に答える 2

6

clone()SE 7でのスレッドの実装は次のとおりです

/**
 * Throws CloneNotSupportedException as a Thread can not be meaningfully
 * cloned. Construct a new Thread instead.
 *
 * @throws  CloneNotSupportedException
 *          always
 */
@Override
protected Object clone() throws CloneNotSupportedException {
    throw new CloneNotSupportedException();
}

スレッドは複製されるようには設計されていません。いくつかの読書をすると、これが非常にうまく要約されていることがわかったコメントの1つが発生しました。-- デビッド・ホームズ

于 2012-12-27T09:28:54.267 に答える
3

スレッドを複製できないため、これは機能しません。コードの 16 行目は、インターフェイス Cloneable を実装していないスーパークラス (スレッド) のクローンを作成しようとしています。スレッドのクローンを作成する以外に、まったく良い考えではありません。新しいスレッドを作成する必要があります。それがここで可能な唯一の解決策です。

于 2012-12-27T09:34:15.007 に答える