본문 바로가기

Thread

자바 쓰레드(Thread) - 싱글쓰레드(single thread)와 멀티쓰레드(multi thread) 예제 2 1. 첫번째 예제 : 싱글쓰레드 javax.swing을 이용해서 입력받는 패널을 띄운다. 입력 값을 받으면 값을 콘솔에 찍고 그 다음에 for문을 돈다. 이 이야기는 입력 받은 값이 없으면 프로그램이 거기서 멈추고 for문을 타지 않는다. 전형적인 싱글쓰레드다. 2. 첫번째 예제 : 멀티쓰레드2 위의 싱글쓰레드에서 for문을 따로 뺐다. 그리고 Thread를 상속받아서 쓰레드로 만들었다. 이제는 input 패널이 뜨더라고 for문은 돈다. 멀티쓰레드다. 3. 두번째 예제 : 멀티쓰레드 위의 첫번째 예제에다가 10초동안 input패널에 값을 입력하지 않았을때 프로그램을 종료하도록 했다. 이를 위해서 메인메소드가 있는 클래스에 inputCheck라는 static boolean값을 생성하였다. 자식쓰레드중 f.. 더보기
자바 쓰레드(Thread) - 싱글쓰레드(single thread)와 멀티쓰레드(multi thread) 예제 처음에 *을 300개 찍고 다음에 #을 300개 찍는걸로 싱글쓰레드와 멀티쓰레드로 나누어 보자. 1. 싱글쓰레드 방법 2. 멀티쓰레드 - 멀티 쓰레드는 클래스를 두개로 나누었다. 메인 메소드가 있는 클래스. 어차피 메인 메소드도 쓰레드라고 했다. 메인 메소드에서 자식 쓰레드를 호출해서 동시에 시작한다. 자식쓰레드 더보기
자바 쓰레드(Thread) - 싱글쓰레드(single thread)와 멀티쓰레드(multi thread) 더보기
자바 쓰레드(Thread) - Runnable을 이용해서 구현 다른 예제 바로 전 글에서 두개의 클래스를 만들어서 Thread를 생성하였다. 물론 Thread를 상속받았었다. 이 걸 Runnable를 구현받아서 만들어 보자. 물론 코드의 종속성, 유연성을 위해서 main메소드가 있는 클래스는 건들지 않는다. 그럼 Thread를 상속받은 클래스만 아래와 같이 고치면 된다. 더보기
자바 쓰레드(Thread) - Thread를 이용한 다른 예제 클래스 두개를 이용해서 쓰레드 예제를 만들어 보자. 우선 우리가 알아야 하는건 자바의 main메소드 역시 쓰레드다. 그럼 아래와 같은 예제를 한번 만들어 볼 수 있다. 메인 메소드에서 수행하는 동시에 다른 클래스(Thread)를 호출해서 동시에 작업하는걸 만들어 보자 둘다 사이좋게(?) 점찍는 일을 하게 하기 위해서 sleep을 알맞게 줬다. 메인메소드가 있는 클래스 콘솔에 결과값이 잘 나온다. 더보기
자바 쓰레드(Thread) - Runnable을 이용해서 구현 2 (조금 변형) 이 전내용은 Runnable 인터페이스를 구현받아 쓰레드를 생성했지만 메인 메소드에서 다시 Thread tt1 = new Thread()해서 실행 시켰다. 하지만 이런 방법보다 조금 더 개선된 코드를 구현 할 수가 있다. 예제로 보자. 그리고 항상 자바 API를 보자. 우선 메인 메소드를 보면 이전에는 t1 = new ThreadTest("First Thread", 5); t2 = new ThreadTest("Second Thread", 5); 다음에 Thread tt1 = new Thread(t1); Thread tt2 = new Thread(t2); tt1.start(); tt2.start(); 를 생성했었다. 메인 메소드에 소스가 길어 지는건 바람직하지 않으니 지웠다. 그럼 어떻게 run메소드를 호.. 더보기
자바 쓰레드(Thread) - Runnable을 이용해서 구현 Runnable을 이용해서 구현하기 전에 sleep()메소드를 사용해서 차례차례 쓰레드가 결과값이 찍게 만들어 보자. run메소드에 sleep메소드를 추가하였다. sleep메소드 안의 숫자는 밀리세컨이다. 즉 1초가 들어오는 쓰레드들을 재운것이다. 이제 Runnable을 이용해보자. 내용은 크게 바뀌는것은 없다. 예제를 보자 Runnable을 implements 받았다. 주석에도 써놨지만 Runnable 인터페이스는 run메소드만 가지고있다. 따라서 sleep()은 없지만 다행이도 sleep() Thread클래스의 static메소드이다. 따라서 사용 할 수 있고 메인메소드의 start()도 없다. 결국 start()를 호출해주기 위해서는 Thread클래스로 객체를 선언해서 ThreadTest의 레퍼런스 .. 더보기
자바 쓰레드(Thread) - Thread클래스를 상속받아 구현 첫번째로 Thread를 상속받아 예제를 만들어 보자. 생성자중 스트링 변수를 받는 생성자가 있는데 이걸로 쓰레드 이름을 넣을 수 있고 getName() 으로 가져올수 있다. 일단 예제를 보자 ThreadTest라는 클래스를 만들고 main메소드를 만들어서 두개의 쓰레드를 생성하였다. 그럼 이 소스에는 몇개의 쓰레드가 있을까? 2개? 아니다 3개다. 메인메소드도 하나의 쓰레드이다. 따라서 이 클래스에는 3개가 있다. 쓰레드의 시작은 레퍼런스.start();를 시스템에게 명령하면 이는 곧바로 run을 실행한다. 위의 소스 결과는 차례대로 숫자가 나왔지만 다시 실행하면 다른 결과값이 나온다. 차례대로 나올꺼라고 단정하면 절대 안되다 더보기
자바 쓰레드(Thread) - 멀티 태스킹 (Multi-Tasking) 1. 멀티 태스킹 - Multi-Tasking (= 멀티프로세스와 거의 유사함) * 하나의 CPU가 여러 개의 프로세스를 교대로 수행하는것 * 각각의 일을 전담하는 해당 프로그램들이 동시에 실행되고 있다는것을 의미 * 일반적으로 멀티 태스킹을 위해서는 여러 개의 프로세스가 메모리 상에서 동시에 실행 * 현재 운영체제들이 취한 방식은 멀티 프로세스 시스템이다. * 멀티 프로세스 시스템에서 각 프로세스는 동시에 실행되는 것처럼 보이지만, CPU가 하나이기 때문에 , 실은 실행 시간을 잘게 나누어서 각 프로세스들이 돌아가면서 CPU를 점유하고 있는 것이다. * 프로세스간의 이런 CPU의 점유작업을 ProcessScheduling이라고 한다. * 프로세스는 실행중인 프로그램이다. * 스케줄러에 의해 처리되는 가.. 더보기
자바 네트워크(Network) - Thread를 이용한 TCP/IP 예제 Thread를 이용한 TCP / IP예제이다. 복수의 클라이언트에서 요청 받은 것을 서버에서는 각각 쓰레드를 생성해서 에코형식의 메세지를 클라이언트에게 전달 해 준다. 우선 서버 프로그램 코드를 보자. 이전에 썼던 내용과 다를게 없다. 서버 소켓, 클라이언트용 소켓 생성해서 무한 루프 돌면서 클라이언트 요청을 받는다. 다만 while문에서 쓰레드를 각각 생성해서 쓰레드에서 에코가 되게 요청단위로 처리해 준다. 쓰레드를 구현한 소스를 보자. 쓰레드기 때문에 서버 프로그램에서 클라이언트 요청이 들어 왔을때 생성자로 요청을 읽고 다시 요청응답을 돌려주기 위해서 InputStream과 OutputStream을 생성하였다. 그리고 run에서는 요청 내용을 읽고 다시 클라이언트로 요청내용을 그대로 돌려 준다(에코,.. 더보기