Multi_Server.zip

//자바 서버파일

Cating.apk

//안드로이드 앱



Thread

이번에는 쓰레드에 대해서 공부해 보겠다.

컴퓨터 내에서 동작하고 있는 프로그램을 프로세스(Process)라고 한다. 

평균적으로 한 개의 프로세스는 한 가지의 일을 하지만, 쓰레드를 이용하면 한 프로세스 내에서 두 가지 또는 그 이상의 일을 동시에 실행 할 수있게 된다.

public class First_Thread extends Thread { public void run() { System.out.println("thread run."); } public static void main(String[] args) { First_Thread test = new First_Thread(); test.start(); } }

Test클래스가 Thread를 상속한 상태이다.

Thread 클래스의 run 메소드를 구현하여 예제와 같이 test.start() 실행 시 test객체의 run 메소드가 수행이 된다. 

여기서 public class Test extends Thread 에서 extends를 선언하였기때문에 start 메소드를 실행시 자동으로 run이라는 매소드를 실행하게된다.

하지만 위의 예제 하나로는 쓰레드가 어떻게 실행되는지를 확실하게 확인할수 없다.

시import java.util.Scanner;

public class Thread_first extends Thread {
public void run() {
int i = 0;
System.out.println("Start Thread"); //Thread가 실행을 알려준다
while (true) {
System.out.println("Thread: "+i);//Thread는 3초마다 1을 증가시켜 출력시킨다
try {
Thread.sleep(3000);
} catch (InterruptedException e) {

e.printStackTrace();
}
i++;
}
}

public static void main(String[] args) {
Thread_first test = new Thread_first();
Scanner s = new Scanner(System.in);
String ch = "Thread Start";
String in = null;

int i = 0, j = 0;
while (true) {
try {
System.out.println("Main: "+i);//Main은 1초마다 1씩증가 시켜서 출력한다.
i++;
Thread.sleep(1000);
if (j == 0) {
in = s.nextLine(); //입력
j++;
}
if (ch.equals(in)) { //입력이 ch에 저장되어있는 "Thread Start"와 같으면 Thread를 실행시키다.
test.start();
}

} catch (Exception e) {
}

        }
}

}

위 예제를 실행해보면 쓰레드와 메인둘다 실행이 되어있다는 것을 확인할수 있다. 하지만 아직도 쓰레드와 메인이 별개로 움직인다는 것을 확실하게 파악하기는 힘듭니다.

다음예제를 봅시다.

public class Thread_first extends Thread {
public void run() {
for(int i=0;i<10;i++){ //Thread에서는 1~10까지 출력
System.out.println("Thread : " + i);
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("Thread END");
}

public static void main(String[] args) {
Thread_first thread = new Thread_first();
thread.start();
for(int i=0;i<5;i++){ //Main에서는 1에서 5까지 출력    
System.out.println("Main : " + i);
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("Main END");
}

}

위 예제를 실행하면 메인과 쓰레드는 별개로 돌아가고 있다는 것을 확인할수 있습니다.

실행결과

Main : 0 Thread : 0 Main : 1 Thread : 1 Main : 2 Thread : 2 Main : 3 Thread : 3 Main : 4 Thread : 4 Main END Thread : 5 Thread : 6 Thread : 7 Thread : 8 Thread : 9 Thread END

실행결과를 보면 5값이 출력되면서 메인은 종료가 된것이 보인다.
하지만 메인이 종료되었어도 쓰레드는 계속해서 돌아가고 있는 것이보인다. 이를 통해 메인과 쓰레드는 별개로 돌아간다는 것을 확인하였다.


'프로그래밍 언어 > JAVA' 카테고리의 다른 글

자바 객제지향  (0) 2016.07.18

C언어로 제작한 은행 프로그램입니다.

Bankprogram.exe




└>소스코드보기

버튼클릭시 이벤트를 이용한 애플리케이션

+ Recent posts