Thread workHard = new Thread()
{ //익명 클래스 기법
  public void run()
  {
        doToughWork(); //이벤트처리및 페인팅 작업등.. 우선 처리 해야할 작업들 (1스레드 임으로 blocking)

        SwingUtilities.invokeLater(new Runnable()
        {
            //메서드의 매개변수로 객체를 생성해서 넘길때도 익명클래스 기법으로 재정의 가능
            public void run()
            {
                updateConponents(); //컴포넌트의 프로퍼티등 상태 수정.. 등의.. 가벼운 작업..
             }
         };
   }
};

workHard.start(); 

=>음..뭐랄까.. 일단 스레드간 병목현상을 없애기 위해서.. 가장 시간이 많이 소요되는 작업을 우선 처리한 후
   그 작업 스레드에서 새로운 스레드를 생성해 다음 작업을 처리시킴... 
   =>서버 소켓의 accept() 후  클라에 대한 i/o용 작업 스레드를 생성해서 start() 시킨것과 같음.

음.. 멀티스레드에서 병목현상이 있다면.. 전에 남궁성선생님 책에서 yield()인가를 쓰면 된다고 했었는데...
아.. yield()는 병목현상이 아니라.. 유휴시간이었던가... 글고 또 다른 방법이 생각났었는데.. 그새 까묵....OTL

하여튼.. 스레드간 순차적인 처리를 하게 한다.

*************************************************************8

음.. 사용자가 스레드 작업을 멈출수 있게.. doToughWork();를 구현

public void doToughWork()
{
  try
  {
      //작업 종료시(모든 객체를 반복해가며 while(){for(객체갯수){doUpdat(); doPaint();}})로 while의 종료조건
      //을 구성하지 말고!  while 업무 종료조건을.. 예전에 nio 헀을당시 스레드 처리 방식처럼..
      
      while(true) //예전 nio땐 클라측 스트림 객체가 not null인 동안
        for(처리할 객체의 갯수만큼)
        {
           if(Thread.interrupted() ) //현재 스레드가 인터럽트 상태인가? 
           {
              throw new IntterruptedException(); <-- 익셉션 발생을 통한 반복문 제어 처리
           }
            객체.update();
            객체.draw();
         }
       Thread.wait(1000); //현재 스레드가 한타임 뛰었으니 1초 휴식 -_-;
  }
  catch(IntterruptedException e)
  {
      //스레드 인터럽트를 알리고
      //객체들 상태가 변화했으면 
      // invokerLater를 호출한다.
   }
}

사용자용 Jbutton의 리스너에

actionPerform(Event e) 인가 에서
{
   workHard.interrrupt(); 를 해주면..
}


(추가)

스윙..컴포넌트 기반의 GUI.. 추후 자바스크립트중 프론트 영역의 MVC처리 , 안드로이드 에서.. 조립및 재사용 단위에

있어서 도움이 되었다.

'자바se api > swing' 카테고리의 다른 글

스윙..  (0) 2014.01.02
이벤트처리 스레드;;  (0) 2014.01.02
propertyEditor vs ConversionService + 토비의 스프링?  (0) 2014.01.02
자바 스윙 겁나 복잡하고 방대함...  (0) 2014.01.02
by givingsheart 2014. 1. 2. 09:28