Java: как использовать Thread.join

Я новичок в streamах. Как я могу заставить t.join работать, когда stream, вызывающий его, ждет, пока t не исполнится?

Этот код просто заморозил бы программу, потому что stream ждет, чтобы он умер, не так ли?

 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); } } 

Что бы я сделал, если бы хотел, чтобы у меня было два streamа, один из которых печатает половину info массива, а затем ждет, пока другой закончит, прежде чем делать все остальное?

    Используйте что-то вроде этого:

     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); } 

    Если otherThread является другим, вы можете сделать что-то вроде этого:

     @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 } } 

    Java-учебник от Sun: http://java.sun.com/docs/books/tutorial/essential/concurrency/join.html

    Вы должны вызвать метод join в другой теме.
    Что-то вроде:

     @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]); } } 
    Давайте будем гением компьютера.