Синхронизация потоков

 
 
 
Сообщения:1
Такое задание:"Основной поток создает дочерний. Родительский и дочерний потоки должны распечатать по десять строк текста. При этом вывод должен быть синхронизирован таким образом, чтобы родительский и дочерний потоки выводили строки строго по очереди."
У меня программа создает перечисление Warrior и Archer, но переодически идет "Archer = 0 Warrior = 0 Warrior=1 " то есть не по порядку и мне не понятно, что не так? И если понятно, что "не так" объясните пожалуйста :)


 public class WarThread2 {
 public static void main(String[] args) {
  WarThread3 threadwar1 = new WarThread3("Warrior");
  threadwar1.start();
  WarThread3 threadwar2 = new WarThread3("Archer");
  threadwar2.start();
 }
}
class WarThread3 implements Runnable {
 Thread warthread;
 private String warname;
 WarThread3(String name) {
  warname = name;
 }
 @Override
 public synchronized void run() {
  for (int i = 0; i < 11; i++) {
   System.out.println(warname + "=" + i);
   try {
    Thread.sleep(10);
   }catch (InterruptedException e) {
    System.out.println("Thread has been interrupted");
   }
  }
 }
 public  synchronized void start() {
    System.out.println("Thread started");
     System.out.println("Thread running" + warname);
  if (warthread == null) {
   warthread = new Thread(this, warname);
   warthread.start();
  }

 }
}
 
 
Сообщения:820
вот зачем запускать потоки, чтобы исполнять последовательно? Последовательно можно работать и в одном потке.
 
 
Сообщения:1019
могут быть задачи, где основная часть задач может быть распараллелена, но некоторые шаги требуют данных от других потоков. но я бы в этом случае паралелил только части которые паралелить можно, а где нельзя джойнил бы потоки.

я бы на твоём месте поигрался с флагами.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет