Java에서 스레드를 설정하는 두 가지 방법, 즉 스레드 클래스를 상속하고 런닝 가능한 인터페이스를 구현하는 두 가지 방법이 있습니다.
스레드를 상속합니다
공개 클래스 신화는 스레드 {public mythread (문자열 이름) {super (name); } int i; public void run () {for (i = 0; i <5; i ++) {system.out.println (getName ()+"-"+i); }} public static void main (String [] agrs) {new Mythread ( "Thread1"). start (); new Mythread ( "Thread2"). start (); }} /*스레드 1-0thread 1-1thread 1-2thread 1-3thread 1-3thread 2-0thread 2-1thread 2-2thread 2-3thread 2-4* /위에서 언급했듯이 Java의 스레드 객체는 클래스 형태로 생성되어야하며,이 클래스에서는 기본 클래스의 run () 메소드를 무시해야합니다. 이 방법은 실제로 실의 실행 본문입니다. 이 클래스 인스턴스의 시작 메소드를 호출하는 것은 암시 적으로 실행 메소드를 호출합니다.
Mythread가 새로운 두 번 이었기 때문에 두 번의 예는 다릅니다. 즉, 각각 고유 한 I 변수가 있으며, 이는 서로 독립적입니다.
실행 가능한 인터페이스
공개 클래스의 부끄러운 구현 런닝 가능한 {int i; public void run () {for (i = 0; i <50; i ++) {system.out.println (thread.currentthread (). getName ()+"-"+i); // getName ()} public static void main (string [] agrs) {myrunnable myrun = new Myrunnable (); 새 스레드 (Myrun, "Thread1"). start (); 새 스레드 (Myrun, "Thread2"). start (); }} /*스레드 1-0THREAD 1-0THREAD 1-0THREAD 2-3THREAD 2-4THREAD 2-5THREAD 2-6THREAD 2-7THREAD 2-8th 2-9th 2-11 스레드 2-11 스레드 2-12th 스레드 2-13thread 2-14th 2-15th 2-16 스레드 2-18 스레드 2-19th 2-18 스레드 2-22th 스레드 2-23 스레드 2-24 번째 스레드 1-24 스레드 2-25 스레드 1-26 스레드 2-27 스레드 1-28 스레드 1-30 스레드 2-29 스레드 2-31 스레드 2-32 스레드 2-34 스레드 2-35 스레드 2-36 스레드 2-37 스레드 2-38 스레드 1-39 스레드 1-39 스레드 1-39 스레드 1- 2--40 스레드 1-42 스레드 1-44 스레드 1-45 스레드 2-43 스레드 1-46 스레드 2-47 스레드 2-49 스레드 1-48*/이 방법이 대상이 동일한 기준 객체 인 경우 객체의 실행 메소드가 호출되고 모든 스레드가 대상 객체의 리소스를 공유하는 한 새 스레드 객체가 새 스레드 개체가 있더라도 객체를 스레드 클래스에 대상으로로드하는 것이기 때문에 알 수 있습니다. 따라서 스레드 1과 스레드 2가 총 51 번 출력되고 두 스레드는 0에서 49에서 I의 출력을 완료했으며 위와 같이 각각 5 번 출력하지 않습니다. 51이 출력 인 이유에 대해서는 두 스레드가 거의 동시에 준비 상태에 들어갑니다 (시작 메소드는 스레드가 준비 상태로 들어가도록 함), I 0, 스레드 1 및 스레드 2가 동시에 실행 상태에 있다는 것을 찾기가 어렵지 않아 동시성 현상 및 I = 0의 출력이 발생한다는 것을 찾기가 어렵지 않습니다. 그 후, CPU는 지속적으로 스레드를 전환하므로 하나의 스레드 만 동시에 출력됩니다.
스레드 상태
실은 4 개 상태로 나뉩니다
준비 상태 : 시작 방법을 호출하고 준비 상태를 입력하십시오.
실행 상태 : 준비 상태의 스레드는 JVM에 의해 예약되어 실행 상태가됩니다.
차단 상태 : 일부 동기화 방법이 결과를 반환하지 않으면 차단 상태가 발생하거나 수면 및 예의.
데스 상태 : 방법 본문이 실행되거나 스레드가 멈추어야합니다.
스레드의 기본 작업
join () 병합 스레드 : 현재 스레드가 스레드의 결합 메소드를 호출 한 후 스레드가 계속되기 전에 실행을 완료 할 때까지 기다립니다.
수면 (긴 밀리 초) 스레드 수면 : 현재 스레드를 차단하면 차단 시간이 증가한 경우에만 계속됩니다. 다시 차단하면 CPU 소유권이 다른 스레드로 넘겨 지므로 수면 (1)은 종종 스레드를 전환하는 데 사용됩니다.
** 수율 () 스레드 양보 : ** Yeild는 수면과 유사하지만 더 높은 수준 또는 같은 수준의 다른 실에만 양보 할 것입니다. 다른 스레드가 레벨보다 낮지 않으면 스레드가 다시 실행됩니다.
배경 스레드
운영 체제에서 프로그램을 실행 한 후 프로세스가 있으며 프로세스에는 하나 이상의 스레드 (주 스레드)가 있습니다. 기본 스레드는 다른 스레드보다 특수한 특징이 많지 않습니다. 단지 가장 빠른 실행 스레드이기 때문에 다른 스레드가 기본 스레드에서 생성됩니다. 지정되지 않으면 전경 스레드 (기본 스레드 포함)가 기본적으로 생성됩니다. setDaemon (true)이 호출되면 스레드는 명시 적으로 배경 스레드로 설정됩니다. 배경 스레드는 데몬 스레드입니다. 이름에서 볼 수 있듯이 주요 기능은 다른 스레드에 가디언 및 서비스 기능을 제공하는 것입니다. 모든 전경 스레드가 종료되면 배경 스레드는 현재 존재하는 의미가 없기 때문에 종료됩니다.
전경 스레드
public class feendbackthread는 스레드 {public feandbackthread (문자열 이름) {super (name); } public void run () {int i; for (i = 0; i <9999; i ++) {System.out.println (this.getName ()+"-"+i); }} public static void main (string [] args) {feendbackthread th = new Feendbackthread ( "Thread a"); //th.setdaemon(true); th.start (); int J; for (j = 0; j <3; j ++) {system.out.println (thread.currentthread (). getName ()+"-"+j); }}}프로그램의 전체 출력 자식 스레드는 0-9998입니다. 이는 기본 스레드가 특별하지 않으며 끝이 다른 전경 스레드의 작동에 영향을 미치지 않음을 의미합니다.
배경 스레드
public class feendbackthread는 스레드 {public feandbackthread (문자열 이름) {super (name); } public void run () {int i; for (i = 0; i <9999; i ++) {System.out.println (this.getName ()+"-"+i); }} public static void main (string [] args) {feendbackthread th = new Feendbackthread ( "Thread a"); th.setdaemon (true); th.start (); int J; for (j = 0; j <3; j ++) {system.out.println (thread.currentthread (). getName ()+"-"+j); }}}이 프로그램은 0-9998을 전체적으로 출력 할 수 없으며, 이는 전경의 기본 스레드가 끝나면 JVM이 배경 스레드를 종료하도록 강요 함을 나타냅니다.
요약
위의 내용은이 기사에서 Java 스레드의 기본 예제 분석에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!