2

新しいインスタンスを作成し、以下のようなメソッドを呼び出すスレッド化されたタイマーを使用しています。

Timer_tick()
{
   Car C;
   C=new Car();
   C.Start()      ///  this will take time to complete
}

私の質問は、次のタイマーティックで同じ操作を実行する別のスレッドがあるということです。次に、2 番目のスレッドが最初の Car インスタンスから参照を削除し、新しい Car インスタンスで start メソッドを呼び出します。これは、最初のオブジェクトが start メソッドを終了していないため (まだ進行中)、「C」変数の参照がなくなっているためです。 . Start()これにより、最初のインスタンスメソッドの完全性または実行に問題が生じますか。GCで回収できますか?

4

2 に答える 2

5

インスタンスは、関数のCarその特定の呼び出しに対してローカルTimer_tick()です。他のスレッドによる後続の呼び出しは、オブジェクトの独自のインスタンスで動作しCarます。

ただし、関数が終了した後、車で何もしていないように見えます。最終的には、開始関数を実行する以外に何もせずにガベージ コレクションが行われます。それはあなたが意図したものですか?

于 2012-11-03T20:58:49.217 に答える
0

あなたのサンプルでは、​​C はグローバル オブジェクトではないため、競合状態は存在しません。C はローカルであり、各スレッドは独自のメソッドのコピーを実行します。したがって、各スレッドは Start メソッドを個別に実行し、その後ガベージ コレクションが発生します。

于 2012-11-03T22:16:34.233 に答える