>Java >java지도 시간 >멀티스레딩의 이해와 사용 소개

멀티스레딩의 이해와 사용 소개

零下一度
零下一度원래의
2017-06-30 09:50:543306검색

1. 워드 부분:

1프로세스 ②현재 쓰레드 쓰레드 ④실행 가능

5인터럽트 6조인 조인 7수율 생성 8동기화 발생

2. 미리보기 부분

1. 프로세스는 시스템 실행 프로그램의 기본 단위

스레드는 프로세스에서 작업을 수행하는 가장 작은 단위입니다

2. 스레드를 생성하는 두 가지 방법을 설명하세요

①스레드 클래스 상속

②Runnable 인터페이스 구현

3. 사이클 여러 단계로 나눌 수 있는데, 각 단계는 무엇인가요? 5단계: ① 생성 ② 준비 ③ 실행 ④ 차단 ⑤ 죽음

4. 스레드를 사용하는 방법은 어떤 방법으로 스레드의 절전, 스레드 적용,

sleep(), Join(), Yield()

5. 스레드를 동기화하는 방법에는 여러 가지가 있습니다. 액세스 충돌은 두 가지 방법으로 수행해야 합니다

: ① 동기식 메소드 ② 동기화된 코드 블록

3. 연습 부분

1. Thread 클래스를 상속받은 메소드를 사용하여 스레드를 생성하고 해당 콘텐츠를 표시합니다

먼저 스레드 클래스를 만듭니다.

package oneOne;

public class MyRunnableone extends Thread{

public void run() {

for(int i=1;i<=20;i++){

System.out.println( i+".Hello, from thread"+Thread.currentThread().getName() );

}
}
}

메인 메소드 클래스를 다시 생성하고 제거하세요

package oneOne;

public class testone {

/**

* @param args

*/

public static void main(String[] args) {

// TODO 자동 생성 메서드 스텁

MyRunnableone my=new MyRunnableone();

MyRunnableone my1=new MyRunnableone();
my .start();
my1.start();
}

}

2. Runnable 인터페이스를 구현하여 스레드를 만듭니다.

첫 번째와 동일합니다. 먼저 구현 클래스를 만듭니다.

package oneTwo;

공용 클래스 MyRunnabletwo는 Runnable을 구현합니다.{

public void run() {

for(int i=1; i<=20;i++){

System.out.println(i+".Hello, from thread"+Thread.currentThread( ).getName());

}
}


}

re 메인 메소드 :

package oneTwo;


public class testtwo {

/**

* @param args

*/

public static void main(String [] args) {

// TODO 자동 생성 메서드 스텁

MyRunnabletwo my=new MyRunnabletwo( );

MyRunnabletwo my1=new MyRunnabletwo();
Thread tr=new Thread(my);
Thread tr1=new Thread(my1 );
tr.start();
tr1.start();
}

}

3. 멀티스레딩을 사용하여 여러 사람이 함께하는 하이킹과 등반을 시뮬레이션합니다

먼저 상속 또는 구현 클래스를 만듭니다(저는 상속을 사용했습니다) here):

package oneThree;

public class MyRunnable three extends Thread{

private int time;

public int num =0;

public MyRunnable three(String name,int time,int kio) {

super(name);

this .time=time;

this.num=kio*1000/100;

}
public void run() {

while (num>0) {
try {
Thread.sleep(this.time);
} catch (InterruptedException e) {
// TODO: 예외 처리
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"100미터 올라갔습니다! ");

num--;
}
System.out.println(Thread.currentThread().getName()+"Arrived at the end!");
}

}

남은 메서드:

package oneThree ;

public class test three {

/**

* @param args

*/

public static void main(String[] args) {

// TODO 자동 생성 메서드 stub

MyRunnable three young=new MyRunnable three("Young man" , 500, 1);

MyRunnable three old=new MyRunnable three("노인", 1500, 1);
MyRunnable three child=new MyRunnable three("어린이", 600, 1);
System.out.println("**** ******등반 시작 *********");
old.start();
young.start();
child.start();
}

}

4. 스레드 우선순위 표시, 설정

먼저 클래스 상속 또는 구현:

package oneFour;

public class MyRunnablefour extends Thread{

public void run() {

Thread.currentThread().setPriority(1);

System.out .println("하위 스레드 이름: "+Thread.currentThread().getName()+", 우선 순위: "+Thread.currentThread().getPriority());

}

}




다음 메인:

패키지 oneFour;

공개 클래스 testfour {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 자동 생성 메서드 스텁
MyRunnablefour myf=new MyRunnablefour();
myf.start();
System.out .println("********************기본 우선순위 표시********");
System.out.println("메인 스레드 이름:" +Thread.currentThread( ).getName()+",우선순위: "+Thread.currentThread().getPriority());
Thread.currentThread().setPriority(10);
System.out.println("** **** *****기본 우선순위 수정 후************");
//myf.setPriority(1);
System.out.println("메인 스레드 이름 : "+Thread.currentThread().getName()+", 우선 순위: "+Thread.currentThread().getPriority());
//System.out.println("하위 스레드 이름: "+MyRunnablefour.currentThread ().getName( )+", Priority: "+MyRunnablefour.currentThread().getPriority());


}

}

5. 의사에게 전화하고 의사를 만나는 것을 시뮬레이션합니다.

먼저 상속하거나 구현합니다. 클래스:

package oneFive;

public class MyRunnablefive 확장 Thread{
private int time;
//public int pertail=0;
public MyRunnablefive(String common,int time) {
super(common);
this.time =time;

}
public void run() {
Thread.currentThread().setPriority(8);
for(int i=1;i<=10;i++){
try {
Thread.sleep(this .time);
} catch (InterruptedException e) {
// TODO: 예외 처리
e.printStackTrace();
}
System.out.println("특수 번호: "+i+" 환자가 의사를 만나고 있습니다! ");

}
}

}

remain:

package oneFive;

public class testfive {

/**
* @param args
*/
public static void main(String[] args) {
/ / TODO 자동 생성된 메서드 stub
//MyRunnablefive pertail=new MyRunnablefive("특수 번호", 1000);

Thread temp=new Thread(new MyRunnablefive("특수 번호", 400));
temp.start( ) ;
Thread.currentThread().setPriority(4);
for(int i=1;i<=50;i++){

if(i==11){

try {
temp.join() ;
} catch (InterruptedException e) {
// TODO: 예외 처리
e.printStackTrace();
}
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO 자동 -생성된 캐치 블록
e.printStackTrace();
}
System.out.println("일반 번호: "+i+" 환자가 의사를 만나고 있습니다.");

}

}
}

6. 스레딩 릴레이 경주 시뮬레이션

먼저 상속 또는 구현 클래스를 만듭니다.

package oneSix;

public 클래스 runSix는 Runnable을 구현합니다.{
private int metres=1000;
public runSix(){


}
@Override
public void run( ) {
// TODO 자동 생성 메서드 스텁
//System.out.println("Coming in");
while (true) {
//type type = (type) true.nextElement();
동기화됨( this) {
if(meters<=100){
break;

}
System.out.println(Thread.currentThread().getName()+" 지휘봉을 잡았습니다! ");
for (int i = 0; i < 100; i+=10) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO 자동 생성된 catch 블록
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"ran"+(i+10)+"meters!");
}
미터-=100; }
}
}

}

Re 메인 인터페이스 클래스:

package oneSix;

public class testix {

/**

* @param args
*/
public static void main(String[] args) {
/ / TODO 자동 생성 메서드 stub
runSix ru=new runSix();
for (int i = 0; i < 5; i++) {
new Thread(ru,(i+1)+"number runer") . start();
}
}

}

7. 온라인 티켓 구매의 멀티스레드 시뮬레이션

타오파오파오, 장피아오피아오, 스캘퍼스가 공동으로 티켓 10장을 가져오고, 스캘퍼가 티켓을 한 장만 가져가도록 제한합니다

먼저 상속 또는 구현 클래스:

package oneSeven;

public 클래스 siteSeven은 Runnable을 구현합니다.{
private int count=10;
private int num=0;
private boolean flag=false;

@Override
public void run() {
// TODO 자동 생성 메서드 스텁
/ /System.out.println("들어오는 중");
while (!flag) {

동기화됨 (this){
//System.out.println("들어오는 중");
if(count<=0) {
flag=true;
return;
}
num++;
count--;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 자동 생성된 catch 블록
e. printStackTrace();
}
String name=Thread.currentThread().getName();
if(name.equals("Scalper")){
System.out.println(name+"첫 번째"+num+" 티켓 확보 , "+count+" 티켓 남음! ");
break;
}
System.out.println(name+"Grabbed "+num+" 티켓, "+count+" 티켓 남음!");
}
}
}

}

메인 인터페이스 클래스를 다시 생성합니다:

package oneSeven;

public class testeven {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto -생성된 메소드 stub
siteSeven si=new siteSeven();
Thread per1=new Thread(si,"Dadong");
Thread yellow=new Thread(si,"Scalper");
Thread per2=new Thread(si, "Qizhen");
per1.start();
yellow.start();
per2.start();
}

}

4: 요약:

1.Thread 클래스의 메서드는 다음에 대한 작업을 구현합니다. 스레드 객체

①스레드 우선순위 조정

②스레드 sleep sleep()

③스레드 강제 실행 Join()

④스레드 제공 Yield()

2. 프로그래머가 최대화할 수 있는 효율적인 프로그램을 작성할 수 있습니다. CPU 사용

3 스레드를 생성하는 두 가지 방법:

①Thread 클래스를 상속하는 하위 클래스를 선언하고 Thread 클래스의 run() 메서드를 구현합니다.

②Runnable 인터페이스 클래스를 구현하는 스레드를 선언한 다음 run() 메소드 구현

위 내용은 멀티스레딩의 이해와 사용 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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