실행 가능 대 스레드

Java의 스레드는 두 가지 방법으로 생성할 수 있습니다.
  • 스레드 클래스 확장
  • 실행 가능한 인터페이스 구현

  • 스레드 클래스 확장:




    class MyThread extends Thread{
        /*
        This is where your implementation of what happens when you start a thread goes.
        You need to override the run method from the Thread class.
        */
        @Override
        public void run()
        {
            System.out.println("Thread is running");
        }
    }
    
    class CreatingThreads {
        public static void main(String[] args) {
            MyThread myThread = new MyThread();
            myThread.start();
        }
    }
    


    실행 가능한 인터페이스 구현




    class MyRunnable implements Runnable{
        @Override
        public void run()
        {
            System.out.println("Thread is running");
        }
    }
    
    class CreatingThreads{
        public static void main(String[] args){
            Runnable myRunnable = new MyRunnable();
            Thread myThread = new Thread(myRunnable);
            myThread.start();
        }
    }
    

    Runnable 인터페이스를 사용하여 람다 식을 통해 스레드를 생성할 수도 있습니다. Thread 클래스는 Runnable 개체를 사용하고 Runnable 인터페이스에는 인수를 사용하지 않는 단 하나의 메서드 실행만 있습니다. 따라서 구현하기 훨씬 쉬운 다음 패턴을 사용하여 Thread를 만들 수 있습니다.

    class CreatingThreads{
        public static void main(String[] args){
            Thread myThread2 = new Thread(() -> {
            //do something here
            //what do you want your thread to do
            });
            myThread2.start();
        }
    }
    

    Runnable 클래스를 확장하는 것보다 Thread 인터페이스를 구현하는 이점은 필요한 경우 다른 클래스를 확장할 공간이 있다는 것입니다. (Java에서는 하나의 클래스만 확장할 수 있습니다.)
    다른 장점은 Thread 클래스에 의해 생성된 각 스레드가 새 객체와 연결되는 반면 Runnable 인터페이스에 의해 생성된 각 스레드는 동일한 객체를 공유한다는 것입니다.
    다음 코드를 살펴보겠습니다.

    
    class MyRunnable implements Runnable{
    
        public int number = 0;
    
        @Override
        public void run() {
            number++;
            System.out.println("Thread is running, "+number);
        }
    
    }
    
    class MyThread extends Thread{
    
        public int number = 0;
    
        @Override
        public void run() {
            number++;
            System.out.println("Thread is running, "+number);
        }
    }
    
    class CreatingThreads{
        public static void main(String[] args) throws InterruptedException {
    
            System.out.println("Implementing Runnable Interface: ");
    
            Runnable myRunnable = new MyRunnable();
            Thread myThread = new Thread(myRunnable);
            Thread myThread2 = new Thread(myRunnable);
            myThread.start();
            Thread.sleep(2000);
    
            myThread2.start();
            Thread.sleep(2000);
    
            System.out.println();
    
            System.out.println("Extending Thread Class: ");
    
            MyThread secondMyThread = new MyThread();
            MyThread secondMyThread2 = new MyThread();
            secondMyThread.start();
            Thread.sleep(2000);
            secondMyThread2.start();
    
        }
    
    }
    


    산출:

    Implementing Runnable Interface: 
    Thread is running, 1
    Thread is running, 2
    
    Extending Thread Class: 
    Thread is running, 1
    Thread is running, 1
    


    보시다시피 Runnable 인터페이스를 구현하여 생성된 스레드는 동일한 객체에서 작동하는 반면 Thread 클래스를 확장하여 생성된 스레드는 다른 객체에서 작동합니다.

    내 블로그Oshan Upreti에서도 찾을 수 있습니다.

    좋은 웹페이지 즐겨찾기