2012-05-25 8 views
0

У меня есть ObjectOutputStream и ObjectInputStream. Я пытаюсь отправить через них ints и объекты. Теперь мне удается отправить и прочитать до определенного момента, и я не знаю, почему он останавливается.ObjectInputStream не удается прочитать

Вот точка:

Читатель:

while (true) { 
     start = in.readInt(); 
     System.out.println("PART 1"); 
     int temp1 = in.readInt(); 
     int temp2 = in.readInt(); 
     int temp3 = in.readInt(); 
     System.out.println("PART12"); 
     Chunk temp = new Chunk(temp1,temp2, temp3); 
     while (true) { 

Он не получает part12 (не проходит первый ква ...)

Автор:

if (chunkList != null) { 
     for (Chunk c: chunkList) { 
      out.writeInt(-1); 
      out.writeInt(c.getLocation().getX()); 
      out.writeInt(c.getLocation().getY()); 
      out.writeInt(c.getLocation().getZ()); 
      if (c.getTileList() != null) { 

все проходит успешно.

Я каждые 2 мс. Промывка в отдельной теме.

Тема:

while (true) 
     { 
      while (c.sendPacket()) { 

      try 
      { 
       if (c.getOut() != null) 
       { 
        c.getOut().flush(); 
       } 
      } 
      catch (IOException ioexception) 
      { 
       ioexception.printStackTrace(); 
      } 

      try 
      { 
       sleep(2L); 
      } 
      catch (InterruptedException interruptedexception) { } 
      } 
     } 

Почему это остановить чтение на части с 3 Интсом?

+0

Где вы указываете? –

+1

(a) Любая причина для ложной промывочной нити? (б) Какое фактическое исключение вы получаете? И как говорит Лайош, (c) как строятся ваши потоки? –

+0

Сколько потоков работает? Вы экспериментируете ?! В любом случае, я подозреваю, что один из потоков работает на бесконечном цикле, учитывая, что я вижу пару while (true). Один код причины в потоке Reader не прошел мимо кода System.out, так что поток освобождает управление другим потоком на выходах консоли, то есть переключает контекст потока. И ... Я не знаю, сколько времени потрачено на поток Writer. Возможно, вам придется показать больше кода, чтобы все мы могли видеть проблему лучше. –

ответ

0

У меня такое ощущение, что это проблема безопасности нитей. Как правило, потоки не предназначены для потокобезопасности. Таким образом, если вы не синхронизируете два потока на более высоком уровне, один поток, записывающий поток, и второй поток, вызывающий сброс, является небезопасным.

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