>  기사  >  Java  >  Java - 프로세스 및 스레드의 자세한 예

Java - 프로세스 및 스레드의 자세한 예

PHP中文网
PHP中文网원래의
2017-06-21 17:04:202047검색
  • 프로세스 및 스레드

 프로세스는 프로그램(작업)의 실행 프로세스이며 동적이며 리소스(공유 메모리, 공유 파일)와 스레드를 보유하고 리소스와 스레드의 전달자입니다.

  스레드는 시스템에서 가장 작은 실행 단위입니다. 동일한 프로세스에는 여러 스레드가 있으며 스레드는 프로세스의 리소스를 공유합니다.

  스레드 상호작용에는 상호 배제와 동기화가 포함됩니다.

  • 스레드의 일반적인 메소드

Java의 스레드 지원은 주로 Thread 클래스와 Runnable 인터페이스에 반영됩니다. 이들은 모두 java.lang 패키지를 상속하고 run()

 

  • 을 갖습니다.

    Thread 잘못된 중지 방법: stop(), Interrupt()

  • 올바른 스레드 중지 방법

public class ArmyRunnable implements Runnable {//volatile保证了线程可以正确读取其他线程写入的值volatile boolean keepRunning = true;
    @Overridepublic void run() {while(keepRunning) {//发动五连击for (int i = 0; i < 5 ; i++) {
                System.out.println(Thread.currentThread().getName() + "进攻对方[" + i + "]");
            }//暂停            Thread.yield();
        }
        System.out.println(Thread.currentThread().getName() + "结束了战斗");
    }
}
  • 경쟁 조건

여러 스레드가 동일한 데이터에 대한 액세스를 공유하는 경우(메모리 영역 ) 동시에 각 스레드가 데이터에 대해 작업을 시도하면 데이터가 손상되는데, 이를 경쟁 조건이라고 합니다.

  • 스레드의 상호 작용: 상호 배제 및 동기화

상호 배제: 동시에 하나의 스레드만 핵심 데이터 또는 중요 섹션에서 작동할 수 있습니다.

  상호 배제 구현: sysnchronized(내재적 잠금), sysnchronized는 다른 스레드가 핵심 리소스에 액세스하기 위해 이 중요한 영역에 들어갈 수 없도록 코드에 잠금을 추가하는 것과 같습니다.

  동기화: 한 스레드의 특정 조건이 충족되지 않기 때문에 다른 스레드는 나중에 조건이 충족되므로 어떤 방식으로든 다른 스레드를 깨울 것입니다. . 실.

  동기화 구현: wait()/notify()/notifyAll()--Object 객체의 멤버 메소드

  대기 세트는 스레드의 휴게실

public void transfer(int from, int to, double amount) {//通过synchronized 关键字来实现互斥,synchronized既可以出现在方法之上,也能以块的形式出现在方法体之中//通过对lockObj加锁实现互斥//加锁操作是有开销的,多次加锁操作会降低系统的性能synchronized (lockObj) {//while循环,保证条件不满足时任务都会被条件阻挡,而不是继续竞争CPU资源while (energyBoxes[from] < amount) {try {//条件不满足,将当前线程放入锁对象(lockObj)上的wait set//wait set 是线程的休息室                    lockObj.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName());
            energyBoxes[from] -= amount;
            System.out.printf("从%d转移%10.2f单位能量到%d", from, amount, to);
            energyBoxes[to] += amount;
            System.out.printf("能量总和:%10.2f%n",getTotalEnergies());            //唤醒所有在lockObj对象上等待的线程            lockObj.notifyAll();
        }
        
    }
  • Runnable 메소드에서 스레드를 생성하는 것과 Runnable 메소드에서 스레드를 생성하는 것의 차이점 Thread 방식

 

  1. Runnable 방식은 Java의 단일 상속 기능으로 인해 Thread 방식으로 인해 발생하는 결함을 피할 수 있습니다.

  2. Runnable 코드를 여러 스레드(Thread 인스턴스)에서 공유할 수 있어 여러 스레드에 적합합니다. 동일한 자원을 처리하기 위해 상황

  • 스레드 수명주기

 

  1. Ready: 스레드 객체가 생성된 후 스레드의 start() 메서드가 호출됩니다(이때 스레드는 단지 CPU 서비스가 실행되기 위한 조건이 있지만 반드시 실행을 시작할 필요는 없습니다.

  2. 실행: 준비 상태의 스레드가 CPU 리소스를 획득하면 실행 상태로 들어가 run() 메서드의 논리 실행을 시작합니다.

  3. 종료: 스레드의 run() 메서드가 실행된 후 또는 스레드가 stop() 메서드를 호출한 후(이 메서드는 종료됨) 스레드는 종료된 상태로 들어갑니다.

  4. 차단: 특정 상황에서 실행 중인 스레드가 어떤 이유로 일시적으로 CPU 리소스를 포기하고 자신의 실행을 일시 중단하며 차단 상태에 들어갑니다. 예를 들어 sleep() 메서드를 호출하는 것입니다

  • 사용자 스레드 및 데몬 스레드

  1. 사용자 스레드: 포그라운드에서 실행, 특정 작업 수행(예: 프로그램의 메인 스레드, 네트워크에 연결되는 하위 스레드

  2. 데몬 스레드: 백그라운드에서 실행 중) 다른 프런트엔드 스레드 서비스의 경우, 모든 사용자 스레드의 실행이 완료되면 데몬 스레드는 JVM과 함께 작업을 종료합니다.

  3. 데몬 스레드 적용: 데이터베이스 연결 풀의 스레드 모니터링, JVM 가상 머신 시작 후 스레드 모니터링. 가장 일반적인 데몬 스레드는 가비지 수집 스레드입니다.

  4. 데몬 스레드 설정: Thread 클래스의 setDaemon(true) 메서드를 호출하여 현재 스레드를 데몬 스레드로 설정합니다. 참고: setDaemon(true)은 start() 메서드보다 먼저 호출되어야 합니다. 그렇지 않으면 예외가 발생합니다. 데몬 스레드에서 생성된 새 스레드는 실행을 위해 데몬 스레드에 할당될 수도 있습니다. 읽기 및 쓰기 작업 또는 계산 논리.

  • 확장

Java 메모리 모드

잠금 및 조건

스레드 안전성: 원자성 및 가시성...

멀티 스레드 프로그래밍을 위한 일반적인 상호 작용 모델

Java 5의 동시 프로그래밍 도구

  • 참고서

 core java

 Java 동시성 실습

위 내용은 Java - 프로세스 및 스레드의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.