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의 스레드 수명 주기
그림>
위의 다이어그램과 같이 스레드의 수명 주기에는 여러 단계가 있습니다.
스레드에 일반적으로 사용되는 방법은 다음과 같습니다.
메소드 | 설명 |
---|---|
시작() | 이 메소드는 스레드의 실행을 시작하고 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
파이썬 프로그래밍 언어를 사용하면 멀티프로세싱 또는 멀티스레딩을 사용할 수 있습니다. 이 자습서에서는 Python에서 다중 스레드 응용 프로그램을 작성하는 방법을 배웁니다. 스레드란 무엇입니까? 스레드는 동시 프로그래밍에서 실행 단위입니다. 멀티스레딩은 CPU가 한 프로세스의 많은 작업을 동시에 실행할 수 있도록 하는 기술입니다. 이러한 스레드는 프로세스 리소스를 공유하면서 개별적으로 실행할 수 있습니다. 프로세스란 무엇입니까? 프로세스는 기본적으로 실행 중인 프로그램입니다. 브라우저나 텍스트 편집기와 같은 컴퓨터에서 응용 프로
Java는 다중 스레드 프로그래밍 언어입니다. 즉, Java를 사용하여 다중 스레드 프로그램을 개발할 수 있습니다. 다중 스레드 프로그램은 동시에 실행할 수 있는 두 개 이상의 부분을 포함하고 각 부분은 특히 컴퓨터에 여러 CPU가 있는 경우 사용 가능한 리소스를 최적으로 사용하여 다른 작업을 동시에 처리할 수 있습니다. 정의에 따르면 멀티태스킹은 여러 프로세스가 CPU와 같은 공통 처리 리소스를 공유하는 경우입니다. 멀티 스레딩은 멀티태스킹의 개념을 단일 응용 프로그램 내의 특정 작업을 개별 스레드로 세분화할 수 있는 응용 프로