2011-03-18 4 views
1

누구나 자바로 예제를 제공하거나, 소켓에서 비동기 적으로 줄을 읽고 각 줄을 BlockingQueue에 넣는 클래스를 구현하는 것에 대한 조언을 할 수있다. 소켓이 연결되어 있고 BlockingQueue 및 소비자가 이미 있다고 가정합니다.소켓에서 줄을 읽어서 BlockingQueue에 넣는다.

편집 : 한 가지 더, 일정 기간 사용하지 않으면 타임 아웃하고 명령을 즉시 중지 할 수 있어야합니다.

숙제가 아니기 때문에이 작업을 수행하고 안정적으로 수행하는 방법에 대한 완전한 예제를 찾을 수 없었습니다.

대단히 감사합니다.

답변

0

솔직히 말해서 이미 작업 한 것 같습니다. BlockingQueue를 생성하고이를 처리 할 스레드가 있어야 당신이 생각하는 소비자입니다.

BlockingQueue<String> receivedQueue = new LinkedBlockingQueue<String>(); 
public void run() 
{ 
    while (true) 
    { 
     try 
     { 
      receivedQueue.put(in.readUTF()); 
     } catch (EOFException e) 
     { 
      ch.getClient().disconnect(); 
      break; 
     } catch (IOException e) 
     { 
      break; 
     } catch (InterruptedException e) 
     { 
      break; 
     } 
    } 
    theQueueProcessor.interrupt(); 
} 
+0

은 간단한데하지만 시간 제한 및 즉시 멈출 수있는 방법에 대해 :

이런 식으로 뭔가 ... 당신은 '에서'는의 DataInputStream을 가정? – Jack

+0

@ 잭 Ok 그래서 연결 시간 초과 또는 오류가 발생하면 EOFException 또는 IO 예외가 발생합니다. 이것들이 잡히고 루프가 끊어집니다. run() 메서드가 종료되면 스레드가 더 이상 실행되지 않습니다. 예제에서 우리가 종료하기 전에 run 메소드에서 마지막으로해야 할 일은 프로세서 스레드를 인터럽트하는 것입니다. 이 실행 메소드를 실행중인 스레드에서 .interrupt를 호출하여 '즉시'중지 할 수 있습니다. – RedNotebook

+0

답변 만 받으실 수 있습니다. – Jack

관련 문제