2012년 8월 2일 목요일

자바 쓰레드 5/10

안드로이드 쓰레드로 제목 나가다가 사람들이 혼돈할까봐 아직은 

자바 쓰레드다.

새롭게 FutureTask를 쓰는 방법이 나온다. 지난 소스를 주석 처리하고 조금 수정해 보았다.

Thread나 Runnable은 run()에다가 쓰레드 내용을 넣는다면

Future Task는 Callable 인터페이스를 쓰는 클레스 안에

call() 매소드에다가 내용을 넣는다. 차이점은 리턴값이 있고 없고라고한다(아래 소스에는 리턴이 없다.)



import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

public class HelloWorld {

private volatile static int a = 0;

public HelloWorld() {

Runnable r = new IamFine("first");
Runnable rr = new IamFine("second");
final FutureTask fTask = new FutureTask(new MyCallable());

// Thread t1 = new Thread(r);
// Thread t2 = new Thread(rr);
//
// try {
// t1.start();
// t2.start();
// } catch (Exception e) {
// // TODO: handle exception
// }
// ExecutorService executorService = Executors.newFixedThreadPool(2);
// executorService.execute(r);
// executorService.execute(rr);
// executorService.shutdown();

ExecutorService excutor = Executors.newFixedThreadPool(1);
excutor.submit(fTask);
excutor.shutdown();

}

class IamFine implements Runnable {
String name;

public IamFine(String name) {
this.name = name;
}

public void run() {
while (true) {
// synchronized(java.lang.Object.class) {
a += 1;
System.out.println(name + "'s Current Count = " + a);
// }

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}

class MyCallable implements Callable {
@Override
public Object call() throws Exception {
for (;;) {
System.out.println("runnable과 뭐가 다른지... ㅋㅋ");

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

public static void main(String[] args) {
System.out.println("Hello World.");
new HelloWorld();

}
}

기초니까... 리턴값 받을 때 까지 딜레이 되는걸 이용하는건 알아서...

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

대학원생의 투고 지도 ④ (완결) — 논문의 수준이란 무엇인가: 사다리와 사분위, 첫 논문 전략

완결편이다. "논문 수준"이라는 말을 해부하고, 에듀테크 석사생의 첫 논문 전략으로 마친다. 학위논문과 학술지 논문은 다른 장르다 먼저 가장 흔한 혼동부터. 학위논문(thesis)은 "내가 연구를 수행할 줄 안다...