Come posso avviare due thread in cui thread1 viene eseguito per primo, thread2 inizia quando thread1 termina mentre il thread del metodo main può continuare il suo lavoro senza il blocco sugli altri due?Esegui due thread che aspettano uno per l'altro mentre il thread principale continua
Ho provato join() tuttavia deve essere chiamato dal thread che deve attendere l'altro, non c'è modo di fare qualcosa come thread2.join (thread1); Se invoco un join all'interno di main(), quindi, in pratica, interrompo l'esecuzione del thread principale e non solo di thread2.
Ho quindi provato con ExecutorService ma ancora lo stesso problema.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Test
{
public static void main(String args[]) throws InterruptedException
{
System.out.println(Thread.currentThread().getName() + " is Started");
class TestThread extends Thread
{
String name;
public TestThread(String name)
{
this.name = name;
}
@Override
public void run()
{
try
{
System.out.println(this + " is Started");
Thread.sleep(2000);
System.out.println(this + " is Completed");
}
catch (InterruptedException ex) { ex.printStackTrace(); }
}
@Override
public String toString() { return "Thread " + name; }
}
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(new TestThread("1"));
boolean finished = executor.awaitTermination(1, TimeUnit.HOURS);
if(finished)
{
//I should execute thread 2 only after thread 1 has finished
executor.execute(new TestThread("2"));
}
//I should arrive here while process 1 and 2 go on with their execution
System.out.println("Hello");
}
}
#edit: Perché ho bisogno di questo:
ho bisogno di questo perché Thread1 copia gli elementi da una tabella di database in un altro database, Thread2 deve copiare una tabella di collegamento, che fa riferimento alla tabella copiata da Filettatura1 . Di conseguenza thread2 deve iniziare a compilare la sua tabella di collegamento solo quando thread1 ha finito, altrimenti un errore di integrità è dato dal database. Ora immagino di avere diversi thread con priorità diverse a causa di tabelle di collegamento complesse e hai un'idea.
Perché avete bisogno di 2 filetti se obbligatorio eseguire una dopo l'altra? – Tala
Ho aggiunto un "Perché ho bisogno di questo" sopra .. spero sia chiaro – dendini
Non proprio, no. –