본문 바로가기

Runnable

[Java Design Patten] Thread Specific Storage 패턴 Thread를 사용하다보면 Local 변수는 상관없지만 다른 용도로 데이터의 저장이 필요할 때 Memeber변수를 사용하는 건 문제가 많을 수 있다. 그럴 때 사용하기 좋은 패턴이다. 여기서 핵심은 Log Class 이고 ThreadLocal을 사용한다는 점을 주목하자~! public class TSLog {private PrintWriter writer = null;public TSLog (final String filename) {try {writer = new PrintWriter (new FileWriter(filename));} catch (final IOException e) {e.printStackTrace();}}public void println(final String s) {writer.. 더보기
[Java Design Patten] Thread per Message 패턴 이번 패턴을 간단하게 요약해서 이야기하면"어떠한 명령이나 요구마다 새로 한개의 쓰레드가 할당되고 그 쓰레드가 처리를 실행한다." 역할은 Client, Host, Helper로 나눌 수 있다. Client는 Request를 요구하는 역할이다. 여기선 Main이 담당 public class Main {public static void main (final String[] args) {final Host host = new Host();host.request(10,'A');host.request(20,'B');host.request(30,'C');} } Host는 Client로부터 Request를 받으면 새로운 Thread를 생성하는 역할 public class Host {private final Helper.. 더보기
[Java Design Patten] Balking 패턴 지금 이 처리를 실행하면 곤란하다거나 혹은 당장 실행할 필요가 없거나 혹은 다른 곳에서 이미 처리를 하고 있는 경우 실행을 중단하고 돌아가는 패턴이다. 가드 되어 있는 객체 역할 이며 guardedMethod와 stateChangingMethod 를 가지고 있는 패턴이다. 여기서는 save와 chage 함수를 보면 된다.public class Data {private final String filename;private String content;private boolean changed;public Data (final String filename, final String content) {this.filename = filename;this.content = content;this.changed = .. 더보기
[Java Design Patten] Immutable 상태의 변화가 없는 경우에는 synchronized를 할 필요가 없다. 여기서는 불변의 객체의 역할로 Person이 담당을 하였다. public final class Person {private final String name;private final String address;public Person (final String name, final String address) {this.name = name;this.address = address;} public String getName() {return name;} public String getAddress() {return address;} @Overridepublic String toString() {return "Person [name=" +.. 더보기