私は同時に2つのタスクを実行している3つのメソッドがあります。これらのタスクの1つはスレッド間で共通ですが、私は3つのタスクがそれを呼び出すためのユニークなメソッドを書く方法を知らない。一般的なメソッドに同じスレッドを書き込む方法は?
private void compare(String path) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
try {
// do something
finished = true;
} catch (IOException e) {
e.printStackTrace();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try{
while(!finished){
statusLabel.setText("P-R-O-C-E-S-S-A-N-D-O");
Thread.sleep(500);
statusLabel.setText("");
Thread.sleep(500);
}
finished = false;
statusLabel.setText("");
}catch(InterruptedException e){
e.printStackTrace();
}
}
});
t1.start();
t2.start();
}
private void sobeNovaBaseBlackList(String path){
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
//do another thing
finished = true;
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try{
while(!finished){
statusLabel.setText("P-R-O-C-E-S-S-A-N-D-O");
Thread.sleep(500);
statusLabel.setText("");
Thread.sleep(500);
}
finished = false;
statusLabel.setText("");
}catch(InterruptedException e){
e.printStackTrace();
}
}
});
t1.start();
t2.start();
}
private void sobeNovaBaseFornecedor(){
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
// do anything
finished= true;
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try{
while(!finished){
statusLabel.setText("P-R-O-C-E-S-S-A-N-D-O");
Thread.sleep(500);
statusLabel.setText("");
Thread.sleep(500);
}
finished = false;
}catch(InterruptedException e){
e.printStackTrace();
}
}
});
t1.start();
t2.start();
}
ご覧のとおり、スレッド2(t2)はすべての方法で同じ動作をします。一度だけt2を書くには?
を呼び出すことができますが、どのように私はT2を終える必要がありますか?私はt1が終了したら、t2が同時に終了する必要があります。 –
t1とt2は相互に独立しているため、時間保証が難しくなります。呼び出し元を終了する前に両方のスレッドが処理するのをブロックする場合は、 'Joins'または' CountDownLatch'を使用して、 – Richeek