2016-12-23 3 views
-5

Ниже мой код. Я ожидаю, что t1 и t2 должны работать параллельно, но после завершения t1 начинается t2. Я делаю что-то неправильно. На самом деле я пытаюсь воспроизвести проблему с производителем и потребителем, но некоторые, где я делаю беспорядок.Java-потоки не работают параллельно

import java.util.ArrayList; 
import java.util.List; 

public class BankThread { 

    static List<String> amount = new ArrayList<String>(); 
    public static void main(String[] args) { 
     Deposit dep = new Deposit(); 
     WithDraw wDraw = new WithDraw(); 
     Thread t1 = new Thread(dep); 
     Thread t2 = new Thread(wDraw); 
     t1.start(); 
     t2.start(); 

    } 

} 

class Deposit extends BankThread implements Runnable { 

    public void run(){ 
     for (int i = 1; i < 10; i++) { 
      amount.add(""+(i*100)); 
      System.out.println("Deposit #" + i 
      + " put: " + i); 
      try { 
      Thread.sleep((int)(1000)); 
      } catch (InterruptedException e) { } 
      } 

    } 
} 

class WithDraw extends BankThread implements Runnable{ 

    public void run(){ 
     System.out.println("In withdraw"+amount.size()); 
     try { 
      for (int i = 0; i< amount.size(); i++) { 
      System.out.println("Withdraw #" + amount.get(i) 
        + " removed " + amount.remove(i)); 
      Thread.sleep((int)(1000)); 
      }} catch (InterruptedException e) { } 
     } 

    } 
+0

Просьба ознакомиться с учебником Jenkov по многопоточности http://tutorials.jenkov.com/java-concurrency/index.html –

+0

@somashaker, http://beginnersbook.com/2013/03/multithreading-in-java/ – kgsharathkumar

+0

Спасибо Gladiator и sharathkumar – somas

ответ

1

Когда я побежал, выход был:

Deposit #1 put: 1 
In withdraw1 
Withdraw #100 removed 100 
Deposit #2 put: 2 
Deposit #3 put: 3 
Deposit #4 put: 4 
Deposit #5 put: 5 
Deposit #6 put: 6 
Deposit #7 put: 7 
Deposit #8 put: 8 
Deposit #9 put: 9 

Так они работают параллельно. Проблема в том, что убрать только прошел цикл, который, вероятно, не тот, который я хотел.

Причина в том, что он рассматривает размер суммы один раз в начале цикла for, поэтому он не видит новые элементы.

Смежные вопросы