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 메인 메소드 :
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; }
}
}
* @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();
}
}
먼저 상속 또는 구현 클래스: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!