오늘을 공부 목표!
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 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
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 구조도 자바 기술을 이용했는데 자바 기술을 아무런 거리낌 없이
쓸 수 있도록 디자인 하지 못했기 때문이다. 이유는 이렇다. 그러나 사실 안드로이드 설계는 완벽하다.
-> 자바의 모든 기술을 깔끔하게 이용하고 있다는 뜻)
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.