목차
Thread에 대한 예비 연구
머리말
스레드 생성하기
Thread 상속
实现Runnable接口
简便的创建方法
常用的方法
使用
Java java지도 시간 Thread의 정의와 일반적인 메소드

Thread의 정의와 일반적인 메소드

Jun 21, 2017 am 09:36 AM
thread 예비 탐사

Thread에 대한 예비 연구

머리말

과거에는 모두가 단일 스레드 프로그램을 작성했고, 모든 호출 방법은 메인 함수에서 단일 스레드 가져오기를 사용하는 것과 마찬가지로 효율성이 특히 낮다는 것을 분명히 알 수 있습니다. python. 웹사이트에 올라가면 데이터 양이 너무 많아 피를 토할 수 있습니다. 오늘은 Java의 동시 프로그래밍 및 멀티스레딩에 대한 학습을 ​​살펴보겠습니다.

스레드 생성하기

다양한 방법이 있습니다. Thread 클래스를 상속하고 Runnable 인터페이스를 구현하는 등 스레드 메소드... 생성된 메소드를 자세히 살펴보겠습니다

Thread 상속

Thread를 상속하면 를 직접 호출할 수 있는 이유 > start() 메소드는 스레드를 시작합니다. start() 자체가 Thread의 메소드, 즉 Thread의 start() 메소드를 상속하므로 이 클래스의 객체입니다. start()를 호출할 수 있습니다. 스레드 시작Thread可以直接调用start()方法启动线程呢,因为start()本身就是Thread的方法,也就是继承了Thread的start()方法,因此这个类的对象可以调用start()启动线程

//继承Threadpublic class MyThread extends Thread {    public void run() {for (int i = 0; i < 10; i++) {
            System.out.println(this.getName()+"正在跑");
        }
    }
}public class Test{public static void main(String[] args)
    {
        Mythread t1=new MyThread();   //创建对象t1.start();     //启动线程}
}
로그인 후 복사

注意: 继承Thread类的创建方法一个对象只能创建一个线程,并不能多个线程共用一个对象,只能一个线程对应一个对象,因此我们来看看实现Runnable接口的类来实现多个线程共享同一个对象

实现Runnable接口

//实现Runnable接口public class Demo implements Runnable {  @Overridepublic void run() {for(int i=0;i<10;i++)
        {
            System.out.println(Thread.currentThread().getName()+"正在跑");
        }

    }
}//测试类public class Test{public static void main(String[] args)
    {
        Demo d=new Demo();  //创建对象Thread thread1=new Thread(d); //为对象创建一个线程Thread thread2=new Thread(d);   //创建另外一个线程//同时启动两个线程thread1.start();
        thread2.start();
    }
}
로그인 후 복사

从上面可以清楚的看到实现Runnable接口的类一个对象可以供多个线程共享,并不像继承Thread类只为一个线程使用

简便的创建方法

直接在main方法中创建,如果创建的普通类的对象在外面,那么必须是final修饰,可以实现多个线程同时共享一个对象,这个和实现Runnable接口一样,这时候就要控制同步条件了,如果在run方法中定义对象,那么,就是一个线程对应一个对象,这个就和继承Thread类一样的效果。所以可以根据条件自由选择

//普通的一个类public class Simple {public void display()
    {for(int i=0;i<10;i++)
        {
            System.out.println(Thread.currentThread().getName()+"正在跑");
        }
    }
}//线程测试类public class Test {public static void main(String[] args) {    //如果在外面必须使用final,当然也可以直写在run方法中,不过写在外面可以实现多个线程共享一个对象//写在run方法中当前对象只能为一个线程使用,和继承Thread类一样的效果final Simple simple=new Simple(); 
        
        //下面创建使用同一个对象创建同两个线程,实现多个线程共享一个对象,和实现Runnable接口一样的效果Thread t1=new Thread(){public void run() {
                simple.display();
            };
        };
        
        Thread t2=new Thread(){public void run() {
                simple.display();
            };
        };        //启动这两个线程t1.start();   
        t2.start();
    }}
로그인 후 복사

常用的方法

  • static void sleep(long mils) 使正在运行的线程休眠mils毫秒,但是这里需要注意的是如果线程加了锁,那么使线程休眠并不会释放锁

  • String getName() 得到线程的名称,上面的程序中已经使用了这个方法

  • void setName(String name) 设置正在运行的线程的名字为name

  • start() 启动线程,线程的创建并不意味着线程的启动,只有调用start()方法线程才是真正的开始运行

  • long getId() 返回线程的标识符

  • run() 线程执行的代码都放在run()方法中,在run方法中的调用是有序的,都是按照程序运行的顺序开始执行

使用

下面使用上面的方法创建一个实例

//线程的类,继承Threadpublic class MyThread1 extends Thread {public void run() { // 重载run方法,并且在其中写线程执行的代码块for (int i = 0; i < 10; i++) {// 获取线程的id和nameSystem.out.println("Thread-Name:   " + this.getName()
                    + "   Thread-id:    " + this.getId());try {this.sleep(1000); // 线程休眠1秒} catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }

}//线程测试的类public class Test {public static void main(String[] args) {
        MyThread1 t1 = new MyThread1(); // 创建线程t1.setName("第一个线程"); // 设置线程的名字MyThread1 t2 = new MyThread1();
        t2.setName("第二个线程");

        t1.start(); // 启动线程,开始运行t2.start();

    }
}
로그인 후 복사
  • void join() 等待该线程终止才能运行其他的线程

  • void join(long mils) 等待该线程的时间为mils毫秒,一旦过了这个时间其他线程正常执行

使用

//线程类public class MyThread1 extends Thread {public void run() { // 重载run方法,并且在其中写线程执行的代码块for (int i = 0; i < 10; i++) {// 获取线程的id和nameSystem.out.println("Thread-Name:   " + this.getName()
                    + "   Thread-id:    " + this.getId());try {this.sleep(1000); // 线程休眠1秒} catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }

}//测试类public class Test {public static void main(String[] args) {
        MyThread1 t1 = new MyThread1(); // 创建线程t1.setName("第一个线程"); // 设置线程的名字t1.start(); // 启动线程,开始运行try {
            t1.join();   //阻塞其他线程,只有当这个线程运行完之后才开始运行其他的线程} catch (InterruptedException e) {
            e.printStackTrace();
        }for (int i = 0; i < 10; i++) {
            System.out.println("主线程正在运行");
        }

    }
}//输出结果/*Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9Thread-Name:   第一个线程   Thread-id:    9主线程正在运行主线程正在运行主线程正在运行主线程正在运行主线程正在运行主线程正在运行主线程正在运行主线程正在运行主线程正在运行主线程正在运行 */
로그인 후 복사
  • getPriority() 得到当前线程优先级

  • setPriority(int num) 更改线程的优先级(0-10)默认的是5,优先级越高获得cpu资源的几率就会越高

使用

//线程类public class MyThread1 extends Thread {public void run() { // 重载run方法,并且在其中写线程执行的代码块for (int i = 0; i < 10; i++) {// 获取线程的id和nameSystem.out.println("Thread-Name:   " + this.getName()
                    + "   Thread-id:    " + this.getId());try {this.sleep(1000); // 线程休眠1秒} catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }

}//测试类public class Test {public static void main(String[] args) {
        MyThread1 t1 = new MyThread1(); // 创建线程t1.setName("第一个线程"); // 设置线程的名字MyThread1 t2 = new MyThread1();
        t2.setName("第二个线程");

        t2.setPriority(8);   //设置第二个线程的优先级为8,第一个线程的优先级为5(是默认的)t1.start();
        t2.start();

    }
}/* * 从上面的运行结果可以看出大部分的第二个线程都是在第一个线程之前开始执行的,也就是说优先级越高获得cpu执行的几率就越大 * /
로그인 후 복사
  • setDaemon(boolean) 是否设置为守护线程,如果设置为守护线程,那么主线程销毁守护线程也会随之销毁

  • isDaemon()

  • //测试类public class MyThread1 extends Thread {public void run() { // 重载run方法,并且在其中写线程执行的代码块for (int i = 0; i < 10; i++) {// 获取线程的id和nameSystem.out.println("Thread-Name:   " + this.getName()
                        + "   Thread-id:    " + this.getId());try {
                    Thread.sleep(1000);  //休眠一秒,方便主线程运行结束} catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
            }
    
        }
    
    }public class Test {public static void main(String[] args) {
            MyThread1 t1 = new MyThread1(); // 创建线程t1.setName("第一个线程"); // 设置线程的名字t1.setDaemon(true);
            t1.start();for (int i = 0; i < 1; i++) {
                System.out.println(i);
            }
    
        }
    }//结果:/* 0123456789Thread-Name:   第一个线程   Thread-id:    9*//* * 从上面的结果可以看出,一旦主线程结束,那么守护线程就会自动的结束 *
    로그인 후 복사

    참고: Thread 클래스의 생성 방법을 상속합니다. 객체는 하나의 스레드만 생성할 수 있고 여러 스레드를 생성할 수 있습니다. 하나의 스레드는 하나의 개체에 대응할 수 없으므로 동일한 개체를 공유하는 여러 스레드를 구현하기 위해 Runnable 인터페이스를 구현하는 클래스를 살펴보겠습니다.

    Runnable 인터페이스 구현


    rrreee

    🎜🎜위에서 명확하게 알 수 있듯이 Runnable 인터페이스를 구현하는 클래스의 객체는 하나의 스레드에서만 사용하는 Thread 클래스를 상속받는 것과 달리 여러 스레드에서 공유할 수 있습니다🎜🎜🎜 main 메소드에서 직접 생성하는 간편한 방법🎜🎜🎜. 생성된 일반 클래스 객체가 외부에 있는 경우 최종 수정해야 합니다. 여러 스레드가 동시에 객체를 공유할 수 있습니다. 이때, 동기화 조건을 제어하기 위해 run 메소드에 객체를 정의하면 하나의 스레드가 하나의 객체에 대응되며 이는 Thread 클래스를 상속받은 것과 동일한 효과를 갖습니다. 그래서 조건에 따라 자유롭게 선택하시면 됩니다🎜🎜🎜rrreee🎜🎜자주 사용하는 방법🎜🎜<ul class=" list-paddingleft-2"><li>🎜<code>static void sleep(long mils) 스레드는 1000분의 1초 동안 휴면 상태입니다. 그러나 여기서 주목해야 할 점은 스레드가 잠겨 있으면 스레드를 휴면 상태로 해도 잠금이 해제되지 않는다는 것입니다🎜🎜🎜🎜🎜
    • 🎜String getName() 스레드 이름을 가져옵니다. 이 메소드는 위 프로그램🎜🎜🎜🎜🎜
        🎜void setName( String name) 실행 중인 스레드의 이름을 name🎜🎜🎜🎜🎜
        • 🎜start로 설정합니다. () 스레드를 시작합니다. 스레드가 생성되었다고 해서 스레드가 시작되는 것은 아닙니다. start() 메서드가 호출되어야 스레드가 실제로 실행되기 시작합니다🎜🎜🎜🎜🎜
          • 🎜long getId () 스레드의 식별자를 반환합니다 🎜🎜🎜🎜🎜
            • 🎜run() 스레드에 의해 실행되는 코드는 run() 메소드에 배치되고, run 메소드에서의 호출은 순서대로 이루어지며, 모두 프로그램이 실행되는 순서대로 실행됩니다. 인스턴스 생성 방법: class=" list-paddingleft-2">
            • 🎜void Join() 다른 스레드를 실행하기 전에 스레드가 종료될 때까지 기다리세요🎜🎜
            • 🎜 void Join(long mils) 이 스레드의 대기 시간은 밀리초입니다. 이 시간이 지나면 다른 스레드는 🎜🎜rrreee🎜🎜
              • 🎜getPriority() 현재 스레드 우선순위 가져오기🎜🎜
              • 🎜setPriority(int num) 스레드 우선순위 변경(0- 10) 기본값은 5일수록 우선순위가 높을수록 CPU 자원을 얻을 확률이 높아집니다🎜🎜🎜🎜🎜use🎜🎜rrreee🎜🎜
                • 🎜setDaemon (boolean) 데몬 스레드로 설정되어 있는지, 데몬 스레드로 설정하면 메인 스레드가 소멸될 때 데몬 스레드도 함께 소멸됩니다🎜🎜
                • 🎜isDaemon() 데몬 스레드인지 확인하세요🎜🎜🎜🎜🎜use🎜🎜rrreee 🎜🎜🎜🎜

위 내용은 Thread의 정의와 일반적인 메소드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java 크롤러 시작하기: 기본 개념 및 적용 방법 이해 Java 크롤러 시작하기: 기본 개념 및 적용 방법 이해 Jan 10, 2024 pm 07:42 PM

Java 크롤러에 대한 사전 연구: 기본 개념과 용도를 이해하려면 구체적인 코드 예제가 필요합니다. 인터넷의 급속한 발전으로 인해 대량의 데이터를 획득하고 처리하는 것은 기업과 개인에게 필수적인 작업이 되었습니다. 크롤러(WebScraping)는 자동화된 데이터 수집 방법으로 인터넷상의 데이터를 빠르게 수집할 수 있을 뿐만 아니라 대량의 데이터를 분석하고 처리할 수도 있습니다. 크롤러는 많은 데이터 마이닝 및 정보 검색 프로젝트에서 매우 중요한 도구가 되었습니다. 이 기사에서는 Java 크롤러의 기본 개요를 소개합니다.

Java에서 Runnable과 Thread의 차이점은 무엇입니까? Java에서 Runnable과 Thread의 차이점은 무엇입니까? May 07, 2023 pm 05:19 PM

Java에서 멀티스레딩을 구현하는 방법에는 두 가지가 있습니다. 하나는 Thread 클래스를 상속하는 것이고, 다른 하나는 Runnable 인터페이스를 구현하는 것입니다. Thread 클래스는 java.lang 패키지에 정의되어 있습니다. 클래스가 Thread 클래스를 상속하고 이 클래스의 run() 메서드를 재정의하는 한 다중 스레드 작업을 구현할 수 있습니다. 그러나 클래스는 하나의 상위 클래스만 상속할 수 있으며 이는 이 메서드의 제한 사항입니다. 예를 살펴보겠습니다: packageorg.thread.demo;classMyThreadextendsThread{privateStringname;publicMyThread(Stringname){super();this

Jul 24, 2023 pm 11:01 PM

Java의 Thread.start() 함수를 사용하여 새 스레드를 시작합니다. Java에서는 멀티스레딩을 사용하여 여러 작업을 동시에 실행할 수 있습니다. Java는 스레드를 생성하고 관리하기 위한 Thread 클래스를 제공합니다. Thread 클래스의 start() 함수는 새 스레드를 시작하고 스레드의 run() 메서드에 있는 코드를 실행하는 데 사용됩니다. 코드 예: publicclassMyThreadextendsThread{@Overr

Thread는 Java에서 인터페이스를 어떻게 생성합니까? Thread는 Java에서 인터페이스를 어떻게 생성합니까? May 17, 2023 pm 12:49 PM

자바에서는 쓰레드에 있어서 쓰레드(Thread)가 필수적이다. 스레드는 프로세스보다 더 가벼운 예약 실행자입니다. 스레드를 사용하는 이유는 무엇입니까? 스레드를 사용하면 운영 체제 프로세스에서 리소스 할당과 실행 일정을 분리할 수 있습니다. 각 스레드는 프로세스 리소스(메모리 주소, 파일 I/O 등)를 공유할 수 있을 뿐만 아니라 독립적으로 예약할 수도 있습니다(스레드는 CPU 예약의 기본 단위입니다). 참고 1. Thread는 Thread를 만드는 데 가장 중요한 클래스이며, 단어 자체도 Thread를 나타냅니다. 2. Thread 클래스는 Runnable 인터페이스를 구현합니다. 인스턴스 publicclassThreadDemoextendsThread{publicvoidrun(){for(inti=0

Spring MVC 이해: 이 프레임워크의 특성에 대한 예비 탐색 Spring MVC 이해: 이 프레임워크의 특성에 대한 예비 탐색 Dec 29, 2023 pm 04:27 PM

SpringMVC 이해: 이 프레임워크의 본질에 대한 예비 탐색에는 특정 코드 예제가 필요합니다. 소개: SpringMVC는 MVC(Model-View-Controller) 디자인 패턴을 채택하고 유연하고 확장 가능한 방식을 제공합니다. 웹 애플리케이션을 구축합니다. 이 기사에서는 SpringMVC 프레임워크의 기본 작동 원리와 핵심 구성 요소를 소개하고 이를 실제 코드 예제와 결합하여 독자가 이 프레임워크의 특성을 더 잘 이해할 수 있도록 돕습니다.

장치 드라이버 블루 스크린에서 스레드 멈춤을 해결하는 5가지 방법 장치 드라이버 블루 스크린에서 스레드 멈춤을 해결하는 5가지 방법 Mar 25, 2024 pm 09:40 PM

일부 사용자는 Microsoft의 3월 Win11 업데이트 패치 KB5035853을 설치한 후 시스템 페이지에 "ThreadStuckinDeviceDriver"가 표시되면서 블루 스크린 사망 오류가 발생했다고 보고했습니다. 이 오류는 하드웨어 또는 드라이버 문제로 인해 발생할 수 있는 것으로 이해됩니다. 다음은 컴퓨터 블루 스크린 문제를 신속하게 해결할 수 있는 5가지 수정 사항입니다. 방법 1: 시스템 파일 검사를 실행합니다. 명령 프롬프트에서 [sfc/scannow] 명령을 실행합니다. 이 명령은 시스템 파일 무결성 문제를 감지하고 복구하는 데 사용할 수 있습니다. 이 명령의 목적은 누락되거나 손상된 시스템 파일을 검사하고 복구하여 시스템 안정성과 정상적인 작동을 보장하는 것입니다. 방법 2: 1. "블루 스크린 복구 도구"를 다운로드하여 엽니다.

C#의 스레드 스레드 개요 C#의 스레드 스레드 개요 Feb 18, 2024 am 11:20 AM

C#에서 스레드 소개, 특정 코드 예제가 필요합니다. C#에서 스레드(thread)는 코드를 실행하기 위한 독립적인 실행 경로입니다. 스레드를 사용하면 여러 작업을 병렬로 실행하고 프로그램의 성능과 응답성을 향상시킬 수 있습니다. 이 문서에서는 C#의 Thread 스레드에 대한 기본 개념, 사용법 및 관련 코드 예제를 소개합니다. 1. 스레드의 기본 개념 스레드는 운영 체제의 기본 실행 단위입니다. C#에서 Thread 클래스는 스레드를 생성하고 조작하기 위한 기본 도구입니다. 스레드는

iPhone 15 Pro는 Apple의 최신 네트워크 기술인 Thread를 환영합니다. iPhone 15 Pro는 Apple의 최신 네트워크 기술인 Thread를 환영합니다. Sep 18, 2023 pm 11:05 PM

iPhone15Pro 및 iPhone15ProMax는 Thread 메시 네트워크 프로토콜을 지원합니다. Thread 네트워킹 기술은 Pro 모델의 새로운 기능으로 나열되어 있지만 iPhone 15 및 iPhone 15 Plus에는 포함되어 있지 않습니다. Apple은 iPhone 15 Pro가 Thread를 지원하는 스마트 홈 제품을 직접 제어하는 ​​데 사용할 수 있는 Thread 라디오가 탑재된 최초의 스마트폰이라고 밝혔습니다. Thread는 이전에 HomePod mini와 Apple TV에 ​​추가되었지만 다른 Apple 장치에는 Thread 연결 기능이 없습니다. Apple은 iPhone 15 Pro 모델에 대한 보도 자료에서 Thread가 "홈"이라고 설명했습니다.

See all articles