Runnableインタフェースと継承Threadクラスの区別を実現

2153 ワード

クラスがThreadを継承する場合、リソース共有には適していません.しかしRunableインタフェースを実現すれば,容易にリソース共有を実現できる.
Runnableインタフェースを実装することは、Threadクラスを継承することよりも優れています.
1):同じプログラムコードを複数適用したスレッドが同じリソースを処理する
2):javaでの単一継承の制限を回避できます.
3):プログラムの堅牢性を高め、コードは複数のスレッドで共有でき、コードとデータは独立している.
コードを直接見る:
1、Threadのdemoを引き継ぐ
package com.multithread.learning;
/**
 *     ,  Thread,      
 *@author
 */
class Thread1 extends Thread{
	private int count=5;
	private String name;
    public Thread1(String name) {
       this.name=name;
    }
	public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(name + "    count= " + count--);
            try {
                sleep((int) Math.random() * 10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
       
	}
}

public class Main {

	public static void main(String[] args) {
		Thread1 mTh1=new Thread1("A");
		Thread1 mTh2=new Thread1("B");
		mTh1.start();
		mTh2.start();
	}
}
2、  Runnable demo
/**
 *        runnable,     
 *@author 
 */
package com.multithread.runnable;
class Thread2 implements Runnable{
    private int count=15;
	@Override
	public void run() {
		  for (int i = 0; i < 5; i++) {
			  System.out.println(Thread.currentThread().getName() + "    count= " + count--);
	            try {
	            	Thread.sleep((int) Math.random() * 10);
	            } catch (InterruptedException e) {
	                e.printStackTrace();
	            }
	        }
	}
	
}
public class Main {

	public static void main(String[] args) {
		Thread2 mTh = new Thread2();
	        new Thread(mTh, "C").start();//   mTh,   Thread     ,           mt,         
	        new Thread(mTh, "D").start();
	        new Thread(mTh, "E").start();
	}
}
//                    ,       ,          !

注意:mainメソッドもスレッドです.Javaではすべてのスレッドが同時に起動され、いつ、どちらが先に実行されるかは、誰が先にCPUのリソースを得るかを完全に見ます.
Javaでは、プログラムが実行されるたびに少なくとも2つのスレッドが起動されます.1つはmainスレッド、1つはゴミ収集スレッドです.Javaコマンドを使用してクラスを実行するたびに、実際にはjvmが起動し、各jvmは実際にオペレーティングシステムでプロセスを開始します.