Thread와 Runnable의 차이점
(1) Thread를 사용한 다중 스레드
클래스를 Thread 클래스의 run 메서드를 다시 쓰는 하위 클래스로 선언합니다.
class PrimeThread extends Thread {
longminPrime;
PrimeThread(longminPrime) {
this.minPrime= minPrime;
}
publicvoid run() {
//compute primes larger than minPrime
.. .
}
}
다음에 라인을 만들고 시작합니다.
PrimeThread p = new PrimeThread(143);
p.start();
(2) Runnable로 멀티스레드 구현
Runnable 인터페이스를 실현하는 클래스를 설명하고, 이 클래스를 실행한 다음run 방법을 설명합니다.
class PrimeRun implements Runnable {
longminPrime;
PrimeRun(longminPrime) {
this.minPrime= minPrime;
}
publicvoid run() {
//compute primes larger than minPrime
.. .
}
}
다음에 라인을 만들고 시작합니다.
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
2. Runnable 인터페이스와 Thread 클래스 간의 연결:
public class Thread extends Object implementsRunnable
Thread 클래스도 Runnable 인터페이스의 하위 클래스입니다.
3. Thread와 Runnable는 자바 다중 루틴을 실현하는 두 가지 방식이고 Thread는 클래스이며 Runnable는 인터페이스이기 때문에 Runnable를 사용하여 다중 루틴을 실현하는 것을 권장한다.두 가지 이유가 있습니다.
(1) 자바 언어의 클래스는 단일 계승만 지원하고 인터페이스는 다중 계승을 지원한다.자바에서 다중 계승 기능은 인터페이스(interface)를 통해 간접적으로 이루어진다.Runnable 인터페이스로 멀티스레드를 구현하는 것이 Thread 클래스로 멀티스레드를 구현하는 것보다 낫다는 것을 알 수 있다.
(2) Runnable 인터페이스는 자원의 공유에 적합하다.
코드 1:
public class ThreadDemo
{
public static void main(String []args)
{
ThreadTest t=new ThreadTest();
t.start();
t.start();
t.start();
t.start();
}
}
class ThreadTest extends Thread
{
private int count=10;
public void run()
{
while(count>0)
{
System.out.println(Thread.currentThread().getName()+" "+count--);
}
}
}
결론: 우리는 사실 한 라인만 가동된 것을 발견했다.
코드 2:
public class ThreadDemo
{
public static void main(String []args)
{
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
}
}
class ThreadTest extends Thread
{
private int count=10;
public void run()
{
while(count>0)
{
System.out.println(Thread.currentThread().getName()+" "+count--);
}
}
}
결론: 우리는 네 개의 라인을 가동한 것을 발견했다. 그들은 각자 자신의 자원을 차지하고 각각 10장의 표를 팔았으며 모두 40장의 표를 팔았다.Thread 클래스는 실제로 자원 공유의 목적을 달성할 수 없습니다.
코드 3:
public class ThreadDemo
{
public static void main(String []args)
{
ThreadTest test=new ThreadTest();
new Thread(test).start();
new Thread(test).start();
new Thread(test).start();
new Thread(test).start();
}
}
class ThreadTest implements Runnable
{
private int count=10;
public void run()
{
while(count>0)
{
System.out.println(Thread.currentThread().getName()+" "+count--);
}
}
}
결론: 우리도 네 개의 라인을 가동한 것을 발견했지만 자원을 공유했고 모두 10장의 표를 팔았다.즉, Runnable을 사용하여 다중 루트를 실현하면 자원 공유의 목적을 달성할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.