2012-04-14 2 views
0

スレッドを使用するアンドロイドアプリを開発しています。これら3つのコードの違いを教えてください。複数のスレッドの開始と結合の順序の違いはありますか?

まず:

Thread t1 = new Thread (new Class1(param1)); 
Thread t2 = new Thread (new Class2(param2)); 

t1.start(); 
t2.start(); 

t1.join(); 
t2.join(); 

第二:

Thread t1 = new Thread (new Class1(param1)); 
Thread t2 = new Thread (new Class2(param2)); 

t1.start(); 
t1.join(); 

t2.start(); 
t2.join(); 

サード:両方のクラス(class1class2)が同じクラスを拡張する場合

Thread t1 = new Thread (new Class1(param1)); 
t1.start(); 

Thread t2 = new Thread (new Class2(param2)); 
t2.start(); 

t1.join(); 
t2.join(); 

また、どのようにそれは違うだろうClass

Class1とClass2の両方のクラスが同じクラス(MAINCLASS)を拡張し、実行可能なものを実装しているかどうかを知る必要があります。言い換えれば、それは働くことができますか? ありがとうございます。

+0

この例では、スレッドを使用して、それが多少無意味製造T2を開始する前に終了するT1を待機するt1.join()メソッドは、単純に進む前に終了するT1スレッドの現在のスレッドを待機させます次の命令。 – barsju

+0

両方のクラスが同じクラスを拡張し、実行可能ファイルを実装する場合、functons間の競合が発生する可能性がありますか? – Adroidist

+0

関数はそれ自身で競合しません。紛争は、同じデータを扱う場合にのみ発生します。そのため、メソッドが動作している変数とフィールドを考慮する必要があります。それらの変数(データ)のインスタンスが共有されている場合、潜在的な競合が発生する可能性があるかどうかを検討する必要があります。彼らが常に異なるインスタンスで動作する場合、何の問題もありません。 – barsju

答えて

1

1)と3)は同じです:両方とも2つのスレッドを開始し、それらが終了するのを待ちます。

2)

+0

クラス1がclass2で使用されている関数以外のメインクラスの関数を使用するのと同じクラスを両方とも拡張すると、競合が発生する可能性がありますか? – Adroidist

関連する問題