top of page

쓰레드(Thread)

이제는 쓰레드는 프로세스 여러 개가 동시에 같이 동작하게 하는 방법입니다. 인터넷 온라인 게임을 생각해 보면 쉽습니다.
각 쓰레드가 준비 또는 동작하고 있다가 어떤 이벤트에 의해 동작하도록 하는 것입니다.
채팅 프로그램 같은 경우에는 멀티쓰레드를 사용합니다. 
참고로 파일 I/O나 데이터베이스를 제어할 때는 반드시 try~catch문을 사용해야 합니다.

 

아래 예제는 멀티 쓰레드를 사용하는 예제입니다. 일반적으로 main()이 포함된 클래스는 맨 마지막에 작성하는 것이 편리합니다. 

 

■ MultiThreadMain.java

 

      package firstpackage; 

      public class MultiThreadMain {     

        public static void main(String[] args) {       

          Thread thread1 = new DigitThread();   //DigitThread가 Thread를 상속 받았기 때문에 가능       

          Thread thread2 = new StringThread();       

          thread1.start();       

          thread2.start();       

          System.out.println("끝~~~~~~");   

        } 

      }   

 

 

■ DigitThread.java

 

      package firstpackage; 

      public class DigitThread extends Thread {  

      // Thread를 상속받는다.  

      // 멀티 상속은 안되며 멀티상속은 인터페이스를 사용하면 됩니다.    

        public void run(){       

          for(int i=1; i<101; i++){       

            System.out.println(i);       

            try {     

            Thread.sleep(500);     

            } catch (InterruptedException e) {         

            // TODO Auto-generated catch block         

            e.printStackTrace();     

            }       

          }   

        } 

      } 

 

메소드 run()은 처음에 다른 이름으로 주고 테스트를 진행한 후에 이상이 없을 때 바꿉니다.  

 

■ StringThread.java

 

      package firstpackage; 

      import java.io.FileNotFoundException; 

      import java.io.FileReader; 

      import java.io.IOException; 

      public class StringThread extends Thread{       

        public void run(){               

          try {     

             FileReader reader = new FileReader("c:/test.txt");          

             //파일 입출력,DB 읽을 때 try문 반드시 포함해야 함     

             while(true){       

               int data = 0;       

               try {           

                 data=reader.read();       

               } catch (IOException e){           

               e.printStackTrace();       

               }       

              char ch=(char)data;       

              if(data == -1) // 데이터가 없으면의 뜻.           

                break;               

               System.out.println(ch);       

              try {           

                Thread.sleep(500);       

              } catch (InterruptedException e) {       

              // TODO Auto-generated catch block           

              e.printStackTrace();       

              }     

            }       

        } catch (FileNotFoundException e) {     

        // TODO Auto-generated catch block     

        //e.printStackTrace();     

        System.out.println(e);       

          }       

        } 

      } 

 

C드라이브의 루트에 메모장으로 test.txt 파일을 생성한 후 몇 줄의 내용을 입력해 놓아야 합니다.

bottom of page