0

Fooというクラスがあり、そのメソッドのいくつかは、時間に依存する値globalTimeに依存しています。簡単にするために、プログラムが開始されてからの秒数を格納する長整数であるとしましょう。ここで、 FooのすべてのインスタンスがglobalTimeに対してまったく同じ値を共有するようにします。もちろん、値を格納する別のクラスを作成し、Fooのすべてのインスタンスにそのクラスの値を取得させることもできますが、クラス内からこれを行う方法はありますか?

静的フィールドのようなものを探していますが、その値を変更することはできますが、インスタンスごとに 1 回ではなく 1 回だけ格納されるため、そのクラスのすべてのインスタンスがそのフィールドに対して同じ値を共有します。

このようなものがJavaに存在するかどうかに興味があります.他の方法よりも良いまたは悪い方法であると言っているわけではないので、これをしたいという「目的」について議論しないでください.

4

5 に答える 5

1

globalTimeマルチスレッドで使用する場合は、同期を処理する静的AtomicLongの使用を検討してください。

于 2013-08-09T11:20:12.123 に答える
1

そのためには静的フィールドを使用する必要があります。静的フィールドの値は、通常のフィールドの値と同じように変更できます。

于 2013-08-09T11:13:24.487 に答える
1

値が globalTime に依存する場合は、static volatilefield を次のように使用します。

public class Foo {
    static volatile long globalTime=System.nanoTime();

}
class B{
    public static void main(String args[]){
        System.out.println(Foo.globalTime);
    }
}

揮発性フィールドは、コンパイラが時間フィールドに依存する値をキャッシュするのを回避するためです。このSOの回答はさらに役立ちます。

于 2013-08-09T11:24:17.503 に答える
0

を呼び出し続けるスレッドにラップされた静的フィールドとして持つことができますSystem.nanoTime()。問題はありません。このようなもの

    private static long timer = 0;
static {
    new Thread(new Runnable() {

        @Override
        public void run() {
            while (true) {
                timer = System.nanoTime() - timer;
            }
        }
    }).start();
}
于 2013-08-09T11:14:44.967 に答える