Java
-
자바 쓰레드의 resume, suspend, stop 구현공부방/Java 2012. 2. 13. 18:48
자바 언어가 1.x 에서 2.x 대를 넘나들 시절에 thread 를 다룰때 뻔질나게 자주 쓰였던 thread 메소드가 resume, suspend , stop 인데 아쉽게도 deprecated (앞으로 쓰지 말라는 뜻) 되어서 별 수 없이 쓰레드의 상태를 관리하는 방식으로 구현을 해야 한다. 구현은 아래와 같은 간단한 코드에서 시작한다. public class ThreadHandle implements Runnable { @Overridepublic void run() { // TODO Auto-generated method stub } } Runnable을 구현한 것을 볼 수 있는데, 꼭 저렇게 할 필요는 없으나 Runnable을 implement 해주지 않으면 별도의 구현체를 클래스로 정의해야하기 때..
-
쓰레드의 Wait()와 notify()사용공부방/Java 2012. 2. 13. 18:37
/** 쓰레드의 Wait()와 notify()사용 import! static java.lang.System.out; class ATM implements Runnable{ private long deposit_Money = 10000; //잔액 private boolean flag = false; public void run(){ synchronized(this){ for(int i = 0 ; i < 10 ; i++){ try{ Thread.sleep(500); }catch(Exception e){ e.printStackTrace(); } if(getDepositMoney() 0){ deposit_Money -= lv_howmuch; out.println(Thread.currentThread().getN..
-
자바 쓰레드 프로그래밍공부방/Java 2012. 2. 13. 18:33
쓰레드 기초"실행중인 프로그램"을 프로세스라고한다. 그러니까 명령어를 입력해서 돌아가는 프로그램은 전부 프로세스인것이다. 프로세스에는 명령어들이 순차적으로 실행이되는데 이것을 실행 쓰레드하고 한다. 순차적으로 실행되는 명령어들을 하나의 실로 꿸 수 있기 때문이다. 이렇게 하나의 실로 꿸 수 있는 프로그램은 단일 쓰레드 프로그램이라고 한다. 그런데 어떤 프로그램에는 여러 개의 함수들이 서로 독립적으로 수행되는 경우도 있다. 이런 경우에는 명령어들이 순차적으로 수행되는 것이 아니기 때문에 하나의 실로 꿸수 없을 것이다. 이런 프로그램은 다중 쓰레드 프로그램이라고 한다. 다음 그림은 세차하는 프로그램이다. 홍길동이 스케쥴표에 나와 있는대로 세차를 하고 있다. 여기서 스케쥴표는 프로그램 명령어들이고, 스케쥴표대..
-
JAVA Thread공부방/Java 2012. 2. 13. 18:27
1. 쓰레드의 의미 쓰레드(Thread)란 무엇인가? 아직 쓰레드 프로그래밍을 해보지 않은 사람이라면 가끔 이런 생각을 해봤을 것이다. '프로그램을 만들 때 하나의 프로그램에서 동시에 두가지 이상의 작업이 이루어지게 하려면 어떻게 해야할까?' 예를들어 "음악이 흐르는 포토뷰어" 라는 프로그램을 생각해보자. 사진을 감상하는 프로그램인데 사진만 감상하긴 좀 밋밋해서 배경으로 음악을 깔고 싶어졌다. 사진을 보면서 음악을 듣는 것에 그치는게 아니라 사진을 넘기고 음악을 바꾸는 작업이 동시에 이루어져야 한다면? 분명 지금까지의 만들어본 프로그램은 main 함수라는 하나의 흐름에 의해 모든것이 이루어 졌을 것이다. 하지만 이젠 사진도 흘러가야하고 음악도 흘러가야 하게 된 것이다. 이렇게 하나의 프로그램 안에 둘 이..
-
Java의 synchronized 분석공부방/Java 2012. 2. 13. 18:26
synchronized (anObject){ // code!! } 위와 같은 구문은 anObject를 기준으로 잡습니다. 그렇기 때문에 완전히 다른 객체끼리도 동기화가 가능합니다. 다음은 제가 주로 사용하는 디버깅 코드입니다. synchronized (java.lang.Object.class) { System.out.println("===========디버깅 시작했다~================"); System.out.println("time:" + new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date())); System.out.print(new Throwable().getStackTrace()[0].getCl..