산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

프로그램 및 예제가 포함된 Java 자습서의 멀티스레딩


모든 애플리케이션에는 여러 프로세스(인스턴스)가 있을 수 있습니다. 이 프로세스 각각은 단일 스레드 또는 다중 스레드로 할당될 수 있습니다. 이 튜토리얼에서 동시에 여러 작업을 수행하는 방법과 스레드 및 스레드 간의 동기화에 대해 자세히 알아보겠습니다.

Java의 이 멀티스레딩 자습서에서는 다음을 배웁니다.

단일 스레드란 무엇입니까?

Java의 단일 스레드는 기본적으로 가볍고 가장 작은 처리 단위입니다. Java는 "Thread Class"를 사용하여 스레드를 사용합니다.

스레드에는 사용자 스레드와 데몬 스레드 의 두 가지 유형이 있습니다. (데몬 스레드는 애플리케이션을 정리할 때 사용되며 백그라운드에서 사용됩니다.)

응용 프로그램이 처음 시작될 때 사용자 스레드가 생성됩니다. 이를 게시하면 많은 사용자 스레드와 데몬 스레드를 생성할 수 있습니다.

단일 스레드 예:

package demotest;

public class GuruThread
{
       public static void main(String[] args) {
              System.out.println("Single Thread");
       }
}

단일 스레드의 장점:

자바에서 멀티스레딩이란 무엇입니까?

멀티스레딩 Java에서 CPU 활용을 최대화하기 위해 동시에 두 개 이상의 스레드를 실행하는 프로세스입니다. 다중 스레드 응용 프로그램은 동시에 실행되는 둘 이상의 스레드를 실행합니다. 따라서 Java에서는 동시성이라고도 합니다. 각 스레드는 서로 병렬로 실행됩니다. 다중 스레드는 별도의 메모리 영역을 할당하지 않으므로 메모리를 절약합니다. 또한 스레드 간의 컨텍스트 전환에 시간이 덜 걸립니다.

다중 스레드의 예:

package demotest;
public class GuruThread1 implements Runnable
{
       public static void main(String[] args) {
        Thread guruThread1 = new Thread("Guru1");
        Thread guruThread2 = new Thread("Guru2");
        guruThread1.start();
        guruThread2.start();
        System.out.println("Thread names are following:");
        System.out.println(guruThread1.getName());
        System.out.println(guruThread2.getName());
    }
    @Override
    public void run() {
    }
}

다중 스레드의 장점:

자바의 스레드 수명 주기

스레드의 수명 주기:

<중앙>

<그림>

Java의 스레드 수명 주기

위의 다이어그램과 같이 스레드의 수명 주기에는 여러 단계가 있습니다.

  1. 신규
  2. 실행 가능
  3. 달리기
  4. 대기
  5. 죽음
  1. 신규: 이 단계에서 스레드는 "Thread class" 클래스를 사용하여 생성됩니다. 프로그램이 시작할 때까지 이 상태를 유지합니다. 스레드. 태어난 스레드라고도 합니다.
  2. 실행 가능: 이 페이지에서 스레드의 인스턴스는 시작 메소드로 호출됩니다. 스레드 제어는 실행을 완료하기 위해 스케줄러에 제공됩니다. 스레드를 실행할지 여부는 스케줄러에 따라 다릅니다.
  3. 실행 중: 스레드가 실행을 시작하면 상태가 "실행 중" 상태로 변경됩니다. 스케줄러는 스레드 풀에서 하나의 스레드를 선택하고 애플리케이션에서 실행을 시작합니다.
  4. 대기 중: 스레드가 기다려야 하는 상태입니다. 응용 프로그램에서 여러 스레드가 실행 중이므로 스레드 간의 동기화가 필요합니다. 따라서 한 스레드는 다른 스레드가 실행될 때까지 기다려야 합니다. 따라서 이 상태를 대기 상태라고 합니다.
  5. 죽음: 스레드가 종료된 상태입니다. 스레드는 실행 중인 상태이며 처리가 완료되는 즉시 "죽은 상태"가 됩니다.


스레드에 일반적으로 사용되는 방법은 다음과 같습니다.


메소드

설명
시작() 이 메소드는 스레드의 실행을 시작하고 JVM은 스레드에서 run() 메소드를 호출합니다.
절전(int 밀리초) 이 메서드는 스레드를 잠자기 상태로 만들므로 제공된 밀리초 동안 스레드 실행이 일시 중지되고 그 후에 스레드가 다시 실행을 시작합니다. 스레드 동기화에 도움이 됩니다.
getName() 스레드의 이름을 반환합니다.
setPriority(int newpriority) 스레드의 우선 순위를 변경합니다.
수익률() 현재 스레드가 중지되고 다른 스레드가 실행되도록 합니다.

예: Java 예제의 이 멀티스레딩 프로그램에서는 스레드를 만들고 스레드에 사용할 수 있는 내장 메서드를 탐색합니다.

package demotest;
public class thread_example1 implements Runnable {
    @Override
    public void run() {
    }
    public static void main(String[] args) {
        Thread guruthread1 = new Thread();
        guruthread1.start();
        try {
            guruthread1.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        guruthread1.setPriority(1);
        int gurupriority = guruthread1.getPriority();
        System.out.println(gurupriority);
        System.out.println("Thread Running");
  }
}

코드 설명:

위의 코드를 실행하면 다음과 같은 결과가 출력됩니다.

출력:

5는 스레드 우선 순위이고 스레드 실행은 코드의 출력인 텍스트입니다.

자바 스레드 동기화

멀티스레딩에는 프로그램의 비동기 동작이 있습니다. 한 스레드가 일부 데이터를 쓰고 다른 스레드가 동시에 데이터를 읽는 경우 애플리케이션에 불일치가 발생할 수 있습니다.

2개 이상의 쓰레드로 공유 자원에 접근할 필요가 있을 때 동기화 방식을 사용한다.

Java는 동기화된 동작을 구현하기 위해 동기화된 메소드를 제공했습니다.

이 접근 방식에서는 스레드가 동기화된 블록 내부에 도달하면 다른 스레드가 동일한 개체에서 해당 메서드를 호출할 수 없습니다. 모든 스레드는 해당 스레드가 동기화된 블록을 끝내고 나올 때까지 기다려야 합니다.

이러한 방식으로 동기화는 다중 스레드 응용 프로그램에서 도움이 됩니다. 한 스레드는 다른 스레드가 실행을 완료할 때까지 기다려야만 다른 스레드가 실행될 수 있습니다.

다음 형식으로 작성할 수 있습니다.

Synchronized(object)
{  
        //Block of statements to be synchronized
}

자바 멀티스레딩 예제

이 멀티스레딩 Java 예제에서는 두 개의 스레드를 가져와 스레드의 이름을 가져옵니다.

예시 1:

GuruThread1.java
package demotest;
public class GuruThread1 implements Runnable{

    /**
     * @param args
     */
    public static void main(String[] args) {
        Thread guruThread1 = new Thread("Guru1");
        Thread guruThread2 = new Thread("Guru2");
        guruThread1.start();
        guruThread2.start();
        System.out.println("Thread names are following:");
        System.out.println(guruThread1.getName());
        System.out.println(guruThread2.getName());
    }
    @Override
    public void run() {
    }
}

코드 설명:

위의 코드를 실행하면 다음과 같은 결과가 출력됩니다.

출력:

스레드 이름은 여기에

로 출력됩니다.

예시 2:

Java의 이 멀티스레딩 예제에서는 실행 가능한 인터페이스의 run() 및 start() 메서드를 재정의하고 해당 클래스의 스레드 두 개를 만들고 그에 따라 실행하는 방법에 대해 알아봅니다.

또한 두 개의 수업을 듣고 있습니다.

package demotest;
public class GuruThread2 {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  GuruThread3 threadguru1 = new GuruThread3("guru1");
  threadguru1.start();
  GuruThread3 threadguru2 = new GuruThread3("guru2");
  threadguru2.start();
 }
}
class GuruThread3 implements Runnable {
 Thread guruthread;
 private String guruname;
 GuruThread3(String name) {
  guruname = name;
 }
 @Override
 public void run() {
  System.out.println("Thread running" + guruname);
  for (int i = 0; i < 4; i++) {
   System.out.println(i);
   System.out.println(guruname);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    System.out.println("Thread has been interrupted");
   }
  }
 }
 public void start() {
  System.out.println("Thread started");
  if (guruthread == null) {
   guruthread = new Thread(this, guruname);
   guruthread.start();
  }
 }
}

코드 설명:

위의 코드를 실행하면 다음과 같은 결과가 나옵니다.

출력 :

두 개의 스레드가 있으므로 "Thread started"라는 메시지가 두 번 나타납니다.

우리는 출력한 대로 스레드의 이름을 얻습니다.

카운터와 스레드 이름을 인쇄하는 for 루프로 이동하고 카운터는 0으로 시작합니다.

루프는 3번 실행되고 스레드 사이에 1000밀리초 동안 휴면 상태가 됩니다.

따라서 먼저 guru1을 얻은 다음 guru2를 얻은 다음 다시 guru2를 얻습니다. 스레드는 여기에서 1000밀리초 동안 휴면하고 다음 guru1, 다시 guru1, 스레드는 1000밀리초 동안 휴면하므로 guru2를 얻은 다음 guru1을 얻습니다.

요약

이 튜토리얼에서는 Java의 다중 스레드 응용 프로그램과 Java에서 단일 및 다중 스레드를 사용하는 방법을 살펴보았습니다.


java

  1. 자바 Hello World 프로그램
  2. 프로그램 예제가 있는 C++ 함수
  3. 예제가 있는 C# 컬렉션 자습서
  4. 하위 문자열 및 예제가 있는 Java 문자열 indexOf() 메서드
  5. 예제가 있는 Java 문자열 charAt() 메서드
  6. Java String compareTo() 메서드:예제와 함께 사용하는 방법
  7. Java의 생성자 오버로딩:프로그램의 정의 및 예제
  8. 소수를 확인하는 자바 프로그램
  9. 프로그램 예제가 있는 Java의 삽입 정렬 알고리즘
  10. 예제가 있는 Java 프로그램의 선택 정렬