Thread 클래스 및 Runnable 인터페이스

2099 단어 Runnable
둘 다 다선정을 실현할 수 있다면 둘의 차이와 연계는 어떤 것들이 있습니까?
Thread 클래스의 정의입니다.
public  class  Thread  extends Object implements  Runnable
Thread 클래스의 정의에서 알 수 있듯이 Thread 클래스도 Runnable 인터페이스의 하위 클래스이지만 Thread 클래스에서 Runnable 인터페이스의run () 방법을 완전히 실현하지 못했다.
차이점: 만약에 하나의 클래스가 Thread 클래스를 계승한다면 여러 라인에서 자원을 공유하는 데 적합하지 않고 Runnable 인터페이스를 실현하면 자원의 공유를 편리하게 실현할 수 있다.
예: 상속 Thread에서는 리소스를 공유할 수 없습니다.
package ThreadDemo01;



class MyThread2 extends Thread {

	private int ticket = 5;



	public void run() { //   Thread  run()  

		for (int i = 0; i < 100; i++) {

			if (ticket > 0) {

				System.out.println("  :tick=" + ticket--);

			}

		}

	}

}



public class ThreadDemo04 {

	public static void main(String[] args) {

		MyThread2 mt1 = new MyThread2();//       1

		MyThread2 mt2 = new MyThread2();//       2

		MyThread2 mt3 = new MyThread2();//       3

		mt1.start();//     1

		mt2.start();//     2

		mt3.start();//     3

	}

}


결과:
티켓팅:tick=5 티켓팅:tick=4 티켓팅:tick=3 티켓팅:tick=2 티켓팅:tick=1 티켓팅:tick=5 티켓팅:tick=4 티켓팅:tick=3 티켓팅:tick=2 티켓팅:tick=1 티켓팅:tick=5 티켓팅:tick=4 티켓팅:tick=3 티켓팅:tick=2 티켓팅:tick=1
예: 리소스 공유를 위한 Runnable
package test1;



class MyThread implements Runnable {

	private int ticket = 5;



	public void run() {

		for (int i = 0; i < 100; i++) {

			if (ticket > 0) {

				System.out.println("  :ticket=" + ticket--);

			}

		}

	}

}



public class ThreadDemo02 {

	public static void main(String[] args) {

		MyThread mt1 = new MyThread(); //       

		new Thread(mt1).start();

		new Thread(mt1).start();

		new Thread(mt1).start();

		new Thread(mt1).start();

		new Thread(mt1).start();

		new Thread(mt1).start();

		new Thread(mt1).start(); //    7   

	}

}


결과:
표 사기:ticket=5 표 사기:ticket=4 표 사기:ticket=3 표 사기:ticket=2 표 사기:ticket=1
7개의 라인을 가동했지만 표 다섯 장을 팔았다는 뜻이다
Runnable을 사용하면 다음과 같은 이점이 있습니다.
1. 같은 프로그램 코드의 여러 라인이 같은 자원을 처리하기에 적합한 경우
2. 자바와의 단일 계승 특성으로 인한 한계를 피할 수 있다
3. 프로그램의 건장성을 강화하고 코드는 다중 루트에 의해 코드와 데이터가 독립될 수 있다
 
 

좋은 웹페이지 즐겨찾기