이해하기 쉬운 설명으로 Java에서 실행 가능이란 무엇입니까? [닫은]


92

평신도의 관점에서 Java에서 "실행 가능"이란 무엇입니까? 저는 고등학교의 AP 프로그래밍 학생으로, 연구를하거나 "실행 가능"이 무엇인지 다른 사람들로부터 찾아야합니다 (우리는 OOP에 들어가고 있으며 아직 스레드를 다루지 않았습니다).


API 문서에는 유용한 라인이 하나뿐입니다. "메서드 실행의 일반적인 계약은 어떤 조치도 취할 수 있다는 것입니다."
Tom Hawtin-tackline

훨씬 더 흥미로운 연구 과제는 다음과 같을 것입니다. 평신도의 관점에서 Java에서 "중단 할 수있는"것은 무엇입니까? 오늘의 강사는 ... 그래서이다
우도 Klimaschewski

9
@UdoKlimaschewski는 - 사람은이다 고등학교 학생이 아닌 학부 또는 대학원 학생. 이 강사의 기대치는 학생의 수준에 비례합니다. IMO. 그러나 나는 "첫 번째 요청 SO"가 OP 수준의 누군가에게 적절한 연구 기술이 아니라는 데 동의합니다.
Stephen C

답변:


189

Runnable은 기본적으로 스레드에 넣을 수있는 클래스 유형 (Runnable은 인터페이스)이며 스레드가 수행해야하는 작업을 설명합니다.

의 Runnable 인터페이스는 메소드를 구현하는 클래스의 요구 run()과 같이 :

public class MyRunnableTask implements Runnable {
     public void run() {
         // do stuff here
     }
}

그리고 다음과 같이 사용하십시오.

Thread t = new Thread(new MyRunnableTask());
t.start();

Runnable인터페이스 가 없다면 다른 스레드에서 작업을 실행하는 Thread 클래스는run() 당신이 오류를 얻을 수 있도록, 클래스의 방법을. 그렇기 때문에 인터페이스를 구현해야합니다.

고급 : 익명 유형

평상시처럼 클래스를 정의 할 필요는 없으며 모든 인라인을 수행 할 수 있습니다.

Thread t = new Thread(new Runnable() {
    public void run() {
        // stuff here
    }
});
t.start();

이것은 위와 비슷하지만 다른 명명 된 클래스를 만들지 않습니다.


68
이것은 "현재 형태로는 합리적으로 대답 할 수 없다"는 주장을 완전히 반증하는 훌륭한 대답입니다.
Russell Silva

1
오랜만 인 건 알지만 질문이 있습니다. 스레드는 한 번만 실행되거나 스레드를 시작할 때 프로그램 내에서 계속 실행됩니까?
gamo

5
스레드는 run메소드가 완료 될 때까지 실행 된 다음 스레드가 닫힙니다. 스레드가 계속 실행되도록하려면 run메서드 내부에 루프를 배치하십시오 .
opatut 2014

2
또는 단순히 Java 8 람다 함수를 사용합니다.new Thread(() -> System.out.println("hello from other thread")).start();
Gabe

9

Runnable 다음과 같이 정의 된 인터페이스입니다.

interface Runnable {
    public void run();
}

그것을 사용하는 클래스를 만들려면 클래스를 다음과 같이 정의하십시오. (public) class MyRunnable implements Runnable {

새 스레드를 만들지 않고도 사용할 수 있습니다. 기본적으로 호출 할 수있는 단일 메서드 실행을 사용하는 기본 인터페이스입니다.

매개 변수로 실행 가능한 새 Thread를 만들면 새 Thread에서 run 메서드를 호출합니다.

또한 Threads는를 구현 Runnable하고 새 스레드가 만들어 질 때 호출됩니다 (새 스레드에서). 기본 구현은 생성자에 건네 준 Runnable을 호출하기 때문에 new Thread(someRunnable)Thread의 run메서드 를 재정의 하지 않고도 수행 할 수 있습니다 .


기본적으로 Thread 상속과 Runnable 구현 사이에 차이가 없다는 말입니까? Runnable을 사용할 때 Thread가 래퍼와 실행기로 사용됩니까?
opatut

나는 [스레드 확장과 실행 재정의]와 [동일한 실행 방법을 가진 실행 파일로 Thread의 새 인스턴스 만들기]간에 차이가 없다고 말하고 있습니다.
Alex Coleman

네 알겠습니다. 그러나 실제로 차이가 없습니까? 성능도 그렇지 않습니까?
opatut

3
@AlexColeman- 차이가 있습니다. Thread스레드 풀링 을 확장하는 것이 어렵고 스레드 풀링을 구현하지 않으면 항상 새 스레드를 만드는 데 상당한 비용이 듭니다. 반대로 구현 Runnable만한다는 것은 ThreadPoolExecutorService또는 타사 스레드 풀 과 같은 것을 쉽게 사용할 수 있음을 의미합니다 .
Stephen C
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.