2012년 8월 1일 수요일

안드로이드 쓰레드 1/10

오늘을 공부 목표!


new Thread(new Runnable() {
public void run() {

}
}).start();
얘가 뭔지 안다.


안드로이드 쓰레드를 정리 하기 위해서

일전에 정리했었던 자바 쓰레드를 정리하면서 시작해 보기로 한다.

-> 자바 쓰레드는 2가지 종류다.


--------------------------------------------
public class HelloWorld {

private  static volatile double a = 0;

public HelloWorld() {

IamFine t1 = new IamFine("first");
IamFine t2 = new IamFine("second");

try {
t1.start();
t2.start();
} catch (Exception e) {
// TODO: handle exception
}
}


class IamFine extends Thread {
String name;

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

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

try {
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();

}
}
-----------------------------------------

이전에 포스팅 했던 요렇게 쓰레드 형태...

그리고

--------------------------------------------

public class HelloWorld {

private  static int a = 0;
public HelloWorld() {
Runnable r = new IamFine("first");
Runnable rr = new IamFine("second");
Thread t1 = new Thread(r);
Thread t2 = new Thread(rr);
try {
t1.start();
t2.start();
} catch (Exception e) {
// TODO: handle exception
}
}
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(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
System.out.println("Hello World.");
new HelloWorld();
}
}
------------------------------------------


다른 점은 하나는 상속해서 더 이상 상속을 못하는 반면, 하나는 implements니까 다른거 상속은
가능하나 적어 줄게 좀 많다는 점.

Runnable r = new IamFine("first");
Runnable rr = new IamFine("second");
Thread t1 = new Thread(r);
Thread t2 = new Thread(rr);
이거랑

Thread.sleep(500);

요정도 되겠다.

 그런데 둘이 비슷한게 runnable을 쓰는게 낫다.

2) In Object oriented programming extending a class generally means adding new functionality, modifying or improving behaviors. If we are not making any modification on Thread than use Runnable interface instead.

Read more: http://javarevisited.blogspot.com/2012/01/difference-thread-vs-runnable-interface.html#ixzz22IWtzHeM

Thread를 상속해서 기능 추가 할거 아니라면 논리적으로도 Runnable을 써야 한다는 것이다.

Thread 인자로 들어가는 Runnable도 분석을 해야 겠지만 ThreadGroup이란 것도 있고 Inner뭐시기
란 첨 들어보는 것들도 보인다.(eclipse auto-complete 뭐시기 기능을 써보니)

자세한 것은 다음으로 미루고 우선 Runnable을 써야 한다는 것을 알았다.


그럼 안드로이드에서도 쓰는가?

물론.

위에 소스를 함축해서

이런식으로 쓴다.



new Thread(new Runnable() {
public void run() {

}
}).start();

무한 루프를 넣을게 아니니까 동시 작업할 때 편하다.

물론, UI 컨트롤을 여기서 하면 안된다.
(이유는 안드로이드 UI 구조도 자바 기술을 이용했는데 자바 기술을 아무런 거리낌 없이
 쓸 수 있도록 디자인 하지 못했기 때문이다. 이유는 이렇다. 그러나 사실 안드로이드 설계는 완벽하다.
-> 자바의 모든 기술을 깔끔하게 이용하고 있다는 뜻)



댓글 없음:

댓글 쓰기

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

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...