3분만 더 걸리면 문에 들어갈 수 있어!

6027 단어
전언
일주일 전에 Java 컬렉션을 검토했습니다.
  • Collection 개요
  • List 집합은 이렇게 간단합니다[원본 분석]
  • 맵 컬렉션, 분산 리스트, 검붉은 나무 소개
  • HashMap은 이렇게 간단해요[원본 분석]
  • LinkedHashMap은 이렇게 간단합니다[원본 분석]
  • TreeMap은 이렇게 간단해요[원본 분석]
  • ConcurrentHashMap은 JDK1을 기반으로 합니다.8 소스 분석
  • Set 집합은 이렇게 간단합니다!
  • 자바 집합 요약[면접문제+뇌도], 지식점 일망타진!

  • 글을 쓰기 전에'자바 핵심기술 권1'의 병발 장과'자바 병발 프로그래밍 실전'의 앞부분을 통독하고 이전에 썼던 필기를 되돌아봤다.오늘부터 다선정 지식으로 들어갑니다~
    이전에 자바 기초를 공부할 때 다선정 기초를 배우는 것은 매우 진지했지만 뒤에서 줄곧 자바 기초를 돌아보지 않고 오랫동안 그것을 잊어버렸다.JavaWeb 공부에도 라인이 많은 데가 없었어요.
    면접이라는 부분은 큰 비중을 차지하기 때문에 다선정을 배우는 것도 앞으로 제 승진에 도움이 될 거라고 생각합니다.
    저도 사실 0부터 다선정을 배우는 것과 비슷합니다. 만약에 글이 틀린 부분이 있으면 많이 포괄해 주시고 댓글에 아낌없이 지적해 주시기 바랍니다~~
    1. 초식 다선정
    1.1 프로세스 소개
    라인까지 얘기하면 또 진행 상황을 언급하지 않을 수 없다~
    프로세스는 우리가 잘 알고 있을 것이다. 윈도우즈에서 작업 관리자를 열면 우리가 운영체제에서 실행하는 프로그램이 모두 프로세스라는 것을 알 수 있다.
    프로세스의 정의:
    프로세스는 프로그램의 일차 집행이다. 프로세스는 프로그램과 데이터가 프로세서에서 순서대로 집행될 때 발생하는 활동이다. 프로세스는 독립된 기능을 가진 프로그램이 하나의 데이터 집합에서 운행하는 과정으로 시스템이 자원 분배와 스케줄링을 하는 독립된 단위이다.
  • 프로세스는 시스템이 자원 분배와 스케줄링을 하는 독립된 단위이다.모든 프로세스는 자신의 메모리 공간과 시스템 자원을 가지고 있다
  • 1.2 리턴 스레드
    그 시스템은 프로세스라는 개념이 생겼다. 프로세스는 이미 자원 분배와 스케줄링을 할 수 있는데 왜 라인을 정해야 합니까?
    프로그램이 동시에 실행되도록 하려면 다음과 같은 일련의 작업이 필요합니다.
  • (1) 프로세스를 만들 때 시스템은 프로세스를 만들 때 프로세서를 제외한 모든 자원을 분배해야 한다. 예를 들어 메모리 공간, I/O 장치와 해당하는 PCB를 만들어야 한다.
  • (2) 프로세스를 취소할 때 시스템은 프로세스를 취소할 때 자신이 점유한 자원에 대해 회수 작업을 한 다음에 PCB를 취소해야 한다.
  • (3) 프로세스 전환, 프로세스를 상하문으로 전환할 때 현재 프로세스의 CPU 환경을 보존하고 새로 선택한 프로세스의 CPU 환경을 설정해야 하기 때문에 많은 프로세서 시간이 걸린다.

  • 프로세스가 멀티프로세서 환경에서의 프로세스 스케줄링, 분배, 전환을 실현할 때 비교적 큰 시간과 공간 비용을 필요로 하는 것을 볼 수 있다
    라인을 도입하는 것은 주로 시스템의 집행 효율을 높이고 프로세서의 공전 시간과 스케줄링 전환 시간을 줄이며 시스템 관리에 편리하도록 하기 위해서이다.OS의 동시성 향상
  • 간단하게 말하자면 프로세스가 다중 처리를 실현하면 CPU 자원을 많이 소모한다. 우리가 도입한 라인은 스케줄링과 분배의 기본 단위(프로세스를 대체하는 부분의 기본 기능[스케줄링])이다.

  • 그럼 라인은 어디 있죠?예를 들면 다음과 같습니다.
    즉, 같은 프로세스 내에서 여러 개의 임무를 수행할 수 있고 이 모든 임무는 하나의 라인임을 알 수 있다.
  • 그러니까 한 프로세스에 한 개 이상의 라인이 있을 거야!

  • 1.3 프로세스 및 스레드
    그래서 우리는 다음과 같이 요약할 수 있다.
  • 프로세스는 자원 분배의 기본 단위로서
  • 스레드는 자원 스케줄링의 기본 단위로서 프로그램의 실행 단위이며 실행 경로(단일 스레드: 하나의 실행 경로, 다중 스레드: 여러 실행 경로)이다.프로그램이 사용하는 CPU의 가장 기본적인 단위입니다.

  • 스레드의 기본 상태는 다음과 같습니다.
  • 실행, 준비, 차단
  • 스레드에는 다음과 같은 5가지 기본 작업이 있습니다.
  • 파생, 막힘, 활성화, 스케줄링, 종료
  • 스레드 속성:
  • 1) 가벼운 실체;
  • 2) 독립적으로 조정하고 분배하는 기본 단위;
  • 3) 동시 실행 가능;
  • 4) 프로세스 리소스를 공유합니다.

  • 스레드에는 두 가지 기본 유형이 있습니다.
  • 1) 사용자급 라인: 관리 과정은 모두 사용자 프로그램에 의해 완성되고 운영체제 내 핵심은 프로세스만 관리한다.
  • 2) 시스템 레벨 스레드(핵심 레벨 스레드): 운영 체제 내부에서 관리한다.OS 커널은 사용자 프로그램이 스레드를 생성, 실행 및 취소할 수 있도록 애플리케이션에 적절한 시스템 호출 및 애플리케이션 인터페이스 API를 제공합니다.

  • 주의해야 할 것은 다선정의 존재는 프로그램의 실행 속도를 높이는 것이 아니다.사실은 응용 프로그램의 사용률을 높이기 위해서이다. 프로그램의 실행은 사실 모두 CPU의 자원, CPU의 집행권을 빼앗는 것이다.여러 프로세스가 이 자원을 빼앗고 있는데, 그 중 어느 프로세스가 실행 경로가 비교적 많으면 CPU의 집행권을 빼앗을 확률이 더 높다
    1.4 병렬 및 동시
    병렬:
  • 병행성은 같은 시간에 두 개 이상의 사건이 발생하는 것을 가리킨다.
  • 병행은 서로 다른 실체상의 여러 사건
  • 동시 사용 가능:
  • 병발성은 같은 시간 간격으로 두 개 이상의 사건이 발생하는 것을 가리킨다.
  • 동일한 실체에 여러 이벤트가 병발
  • 이를 통해 알 수 있듯이 병행은 프로세스를 대상으로 하고 병발은 라인을 대상으로 한다.
    1.5Java 멀티스레드
    위에서 많은 기초를 말하고 이해한 말.우리는 자바로 돌아가서 자바가 어떻게 다선정을 실현하는지 봅시다~
    Java 구현 멀티스레드는 Thread 클래스를 사용합니다. Thread 클래스의 맨 위에 있는 설명을 보십시오.
    위의 상단 설명을 통해 알 수 있듯이 다중 스레드를 만드는 두 가지 방법이 있습니다.
  • Thread 계승,run 다시 쓰기 방법
  • Runnable 인터페이스를 실현하고run 방법을 다시 쓰기
  • 1.5.1 Thread 계승,run 다시 쓰기 방법
    클래스 만들기, Thread 상속,run 메서드 다시 쓰기
    
    public class MyThread extends Thread {
    
        @Override
        public void run() {
            for (int x = 0; x < 200; x++) {
                System.out.println(x);
            }
        }
    
    }

    테스트를 한번 해보겠습니다.
    
    public class MyThreadDemo {
        public static void main(String[] args) {
            //         
            MyThread my1 = new MyThread();
            MyThread my2 = new MyThread();
    
            my1.start();
            my2.start();
        }
    }

    1.5.2 Runnable 인터페이스를 실현하고run 방법을 다시 쓰기
    Runnable 인터페이스를 실현하고run 방법을 다시 쓰기
    
    public class MyRunnable implements Runnable {
    
        @Override
        public void run() {
            for (int x = 0; x < 100; x++) {
                System.out.println(x);
            }
        }
    
    }

    테스트를 한번 해보겠습니다.
    
    public class MyRunnableDemo {
        public static void main(String[] args) {
            //   MyRunnable    
            MyRunnable my = new MyRunnable();
    
            Thread t1 = new Thread(my);
            Thread t2 = new Thread(my);
    
            t1.start();
            t2.start();
        }
    }

    결국은 위와 똑같아요. 여기는 스티커 안 찍을게요.
    1.6 Java 멀티스레드 구현에 주의해야 할 세부 사항run()start()를 헷갈리지 마세요~
    run ()과 start () 방법의 차이점:
  • run(): 라인에 의해 실행된 코드만 봉인하고 직접 호출하는 것은 일반적인 방법
  • start(): 먼저 라인을 시작한 다음에 jvm에서 이 라인의run() 방법을 호출합니다.

  • jvm 가상 기기의 시작은 단일 라인입니까 아니면 다중 라인입니까?
  • 는 다선정이다.main 라인뿐만 아니라 쓰레기 회수 라인도 시작할 거예요. 그렇지 않으면 누가 사용하지 않는 메모리를 회수해 줄 거예요~
  • 그렇다면 두 가지 방식으로 다선정을 실현하는 이상 우리는 어떤 방식을 사용합니까???
    일반적으로 Runnable 인터페이스를 사용하는 경우
  • java의 단일 계승 제한을 피할 수 있다
  • 병행 운행 임무와 운행 메커니즘을 결합시켜야 하기 때문에 우리는 Runnable 인터페이스를 실현하는 방식을 선택했다!

  • 2. 총결산
    이 편은 주로 라인이 무엇인지 설명하였는데, 라인의 기초를 이해하는 것은 우리들의 향후 학습에 도움이 된다.여기는 주로 간단하게 들어갔어요.
    상단의 주석을 읽을 때 우리는'우선순위','백그라운드 라인'같은 단어가 있다는 것을 발견했다. 이 단어는 그들이 무엇인지를 설명하지 않은 것이다. 그래서 다음 편은 Thread의 API를 주로 설명하는 것이니 기대해 주시기 바랍니다.
    스레드를 사용하면 사실 우리 데이터가 안전하지 않고 심지어 프로그램이 실행될 수 없는 상황을 초래할 수 있다. 이런 문제들은 다음에 설명할 것이다.
    이전에 운영체제를 공부할 때 이라는 책에 따라 조금씩 필기를 했는데 모두 비교적 얕은 지식이었다.여러분들께 도움이 될지도 몰라요~
  • 운영체제 제1편【인용】
  • 운영체제 제2편[프로세스 관리]
  • 운영 체제 3편 [스레드]
  • 운영체제 제4편[프로세서 스케줄링]
  • 운영체제 5편【사쇄】
  • 운영 체제 제6편【메모리 관리】
  • OS 제7편 [디바이스 관리]
  • 참조 자료:
  • 만약 문장에 잘못된 부분이 있다면 바로잡아 주시고 서로 교류해 주십시오.위챗에서 기술 문장을 보는 습관이 되어 자바 자원을 더 많이 얻으려는 학생들은 위챗 공식 번호인 자바3y에 주목할 수 있다.여러분의 편의를 위해 방금 qq군을 신설했습니다. 742919422, 여러분도 교류를 할 수 있습니다.감사합니다필요한 분들께 소개를 많이 해주시면 좋을 것 같아요.
    기사의 디렉토리 탐색:
  • https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang
  • 좋은 웹페이지 즐겨찾기