thread array java concurrency join multithreading

array - Java: cómo utilizar Thread.join



thread join python (3)

Con otro hilo siendo el otro hilo, puedes hacer algo como esto:

@Override public void run() { int i = 0; int half = (info.size() / 2); for (String s : info) { i++; if (i == half) { try { otherThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("%s %s%n", getName(), s); Thread.yield(); //Give other threads a chance to do their work } }

El tutorial de Java de Sun: http://java.sun.com/docs/books/tutorial/essential/concurrency/join.html

Soy nuevo en hilos. ¿Cómo puedo hacer que t.join funcione, por lo que el hilo que lo llama espera hasta que t t.join de ejecutarse?

Este código simplemente congelaría el programa, porque el hilo se está esperando a sí mismo para morir, ¿verdad?

public static void main(String[] args) throws InterruptedException { Thread t0 = new Thready(); t0.start(); } @Override public void run() { for (String s : info) { try { join(); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("%s %s%n", getName(), s); } }

¿Qué haría si quisiera tener dos subprocesos, uno de los cuales imprime la mitad de la matriz de info , y luego espera que el otro termine antes de hacer el resto?


Tienes que llamar al método de join en el otro hilo.
Algo como:

@Override public void run() { String[] info = new String[] {"abc", "def", "ghi", "jkl"}; Thread other = new OtherThread(); other.start(); for (int i = 0; i < info.length; i++) { try { if (i == info.length / 2) { other.join(); // wait for other to terminate } Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("%s %s%n", getName(), info[i]); } }


Usa algo como esto:

public void executeMultiThread(int numThreads) throws Exception { List threads = new ArrayList(); for (int i = 0; i < numThreads; i++) { Thread t = new Thread(new Runnable() { public void run() { // do your work } }); // System.out.println("STARTING: " + t); t.start(); threads.add(t); } for (int i = 0; i < threads.size(); i++) { // Big number to wait so this can be debugged // System.out.println("JOINING: " + threads.get(i)); ((Thread)threads.get(i)).join(1000000); }