3분만 더 걸리면 문에 들어갈 수 있어!
일주일 전에 Java 컬렉션을 검토했습니다.
글을 쓰기 전에'자바 핵심기술 권1'의 병발 장과'자바 병발 프로그래밍 실전'의 앞부분을 통독하고 이전에 썼던 필기를 되돌아봤다.오늘부터 다선정 지식으로 들어갑니다~
이전에 자바 기초를 공부할 때 다선정 기초를 배우는 것은 매우 진지했지만 뒤에서 줄곧 자바 기초를 돌아보지 않고 오랫동안 그것을 잊어버렸다.JavaWeb 공부에도 라인이 많은 데가 없었어요.
면접이라는 부분은 큰 비중을 차지하기 때문에 다선정을 배우는 것도 앞으로 제 승진에 도움이 될 거라고 생각합니다.
저도 사실 0부터 다선정을 배우는 것과 비슷합니다. 만약에 글이 틀린 부분이 있으면 많이 포괄해 주시고 댓글에 아낌없이 지적해 주시기 바랍니다~~
1. 초식 다선정
1.1 프로세스 소개
라인까지 얘기하면 또 진행 상황을 언급하지 않을 수 없다~
프로세스는 우리가 잘 알고 있을 것이다. 윈도우즈에서 작업 관리자를 열면 우리가 운영체제에서 실행하는 프로그램이 모두 프로세스라는 것을 알 수 있다.
프로세스의 정의:
프로세스는 프로그램의 일차 집행이다. 프로세스는 프로그램과 데이터가 프로세서에서 순서대로 집행될 때 발생하는 활동이다. 프로세스는 독립된 기능을 가진 프로그램이 하나의 데이터 집합에서 운행하는 과정으로 시스템이 자원 분배와 스케줄링을 하는 독립된 단위이다.
그 시스템은 프로세스라는 개념이 생겼다. 프로세스는 이미 자원 분배와 스케줄링을 할 수 있는데 왜 라인을 정해야 합니까?
프로그램이 동시에 실행되도록 하려면 다음과 같은 일련의 작업이 필요합니다.
프로세스가 멀티프로세서 환경에서의 프로세스 스케줄링, 분배, 전환을 실현할 때 비교적 큰 시간과 공간 비용을 필요로 하는 것을 볼 수 있다
라인을 도입하는 것은 주로 시스템의 집행 효율을 높이고 프로세서의 공전 시간과 스케줄링 전환 시간을 줄이며 시스템 관리에 편리하도록 하기 위해서이다.OS의 동시성 향상
그럼 라인은 어디 있죠?예를 들면 다음과 같습니다.
즉, 같은 프로세스 내에서 여러 개의 임무를 수행할 수 있고 이 모든 임무는 하나의 라인임을 알 수 있다.
1.3 프로세스 및 스레드
그래서 우리는 다음과 같이 요약할 수 있다.
스레드의 기본 상태는 다음과 같습니다.
스레드에는 두 가지 기본 유형이 있습니다.
주의해야 할 것은 다선정의 존재는 프로그램의 실행 속도를 높이는 것이 아니다.사실은 응용 프로그램의 사용률을 높이기 위해서이다. 프로그램의 실행은 사실 모두 CPU의 자원, CPU의 집행권을 빼앗는 것이다.여러 프로세스가 이 자원을 빼앗고 있는데, 그 중 어느 프로세스가 실행 경로가 비교적 많으면 CPU의 집행권을 빼앗을 확률이 더 높다
1.4 병렬 및 동시
병렬:
1.5Java 멀티스레드
위에서 많은 기초를 말하고 이해한 말.우리는 자바로 돌아가서 자바가 어떻게 다선정을 실현하는지 봅시다~
Java 구현 멀티스레드는 Thread 클래스를 사용합니다. Thread 클래스의 맨 위에 있는 설명을 보십시오.
위의 상단 설명을 통해 알 수 있듯이 다중 스레드를 만드는 두 가지 방법이 있습니다.
클래스 만들기, 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 가상 기기의 시작은 단일 라인입니까 아니면 다중 라인입니까?
일반적으로 Runnable 인터페이스를 사용하는 경우
2. 총결산
이 편은 주로 라인이 무엇인지 설명하였는데, 라인의 기초를 이해하는 것은 우리들의 향후 학습에 도움이 된다.여기는 주로 간단하게 들어갔어요.
상단의 주석을 읽을 때 우리는'우선순위','백그라운드 라인'같은 단어가 있다는 것을 발견했다. 이 단어는 그들이 무엇인지를 설명하지 않은 것이다. 그래서 다음 편은 Thread의 API를 주로 설명하는 것이니 기대해 주시기 바랍니다.
스레드를 사용하면 사실 우리 데이터가 안전하지 않고 심지어 프로그램이 실행될 수 없는 상황을 초래할 수 있다. 이런 문제들은 다음에 설명할 것이다.
이전에 운영체제를 공부할 때 이라는 책에 따라 조금씩 필기를 했는데 모두 비교적 얕은 지식이었다.여러분들께 도움이 될지도 몰라요~
기사의 디렉토리 탐색:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.