JAVA/Thread

Thread 폴링 방식

반응형

폴링 방식

  • 계속 돌면서 쓰레드가 종료될 때까지 while문으로 대기하다가 출력되면 종료

콜링 방식

  • 쓰레드 안에서 종료되면 호출 하는 방식
  • 호출할 클래스의 레퍼런스를 알기위해서 대게 생성자로 해당 클래스에 대한 정보를 넘긴다.
  • 콜백이 폴링보다 좋은 이유는 CPU 시간을 낭비하지 않는다.
  • 콜백에 대표적인 예는 UI 컴포넌트에 이벤트를 달고 리스너를 지정해 주는 것이다그러면 해당 객체는  본인을 호출할경우 해당 메소드를 호출하는 콜백을 진행한다이는 옵저버 패턴이라고 한다.



스레드의 run() 메소드의 실행이 거의 끝나갈때, 마지막으로 해야 할 작업은 결과값과 함께 메인 프로그램에서 미리 정해 놓은 메소드를 호출하는 것이다.


메인 프로그램이 각각의 스레드에 대해서 결과를 물어 보는 것이 아니라, 각각의 스레드가 메인 프로그램에게 결과를 알려주는 방식이다.


package callback;


import javax.xml.bind.DatatypeConverter;


public class CallbackDigestUserInterface {

public static void receiveDigest(byte[] digest, String name){

StringBuilder result = new StringBuilder(name);

result.append(": ");

result.append(DatatypeConverter.printHexBinary(digest));

System.out.println(result);

}

public static void main(String[] args){

    CallbackDigestUserInterface cc = new CallbackDigestUserInterface();

CallbackDigest cb = new CallbackDigest("copyFile.txt", cc);

Thread t = new Thread(cb);

t.start();

}

}






package callback;

import java.io.FileInputStream;
import java.io.IOException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class CallbackDigest implements Runnable{ //callback은 쓰레드가 종료될때 새로운 메소드를 호출한다.
private String filename;
CallbackDigestUserInterface callback;
public CallbackDigest(String filename, CallbackDigestUserInterface callback){
this.filename = filename;
this.callback=callback;
}
public void run(){
FileInputStream in;
try{
MessageDigest sha  = MessageDigest.getInstance("SHA-256");
in = new FileInputStream(filename);
DigestInputStream din = new DigestInputStream(in, sha);
while(din.read() != -1);
din.close();
byte[] digest = sha.digest();
this.callback.receiveDigest(digest, filename);
} catch(IOException ex){
ex.printStackTrace();
System.err.println(ex);
} catch(NoSuchAlgorithmException ex){
ex.printStackTrace();
System.err.println(ex);
}
}
}


반응형

'JAVA > Thread' 카테고리의 다른 글

Thread 크리티컬 세션  (0) 2016.12.21
java thread pool 소개  (0) 2016.12.21
JAVA 스레드 스케줄링  (0) 2016.12.21
Thread 동기화 문제  (0) 2016.12.21
JAVA Thread Futher, Callable, Executor  (0) 2016.12.21