글
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 |
RECENT COMMENT