Java同時プログラミング:スレッドの作成方法


一.スレッドの作成方法
1.javaを実現する.lang.Runnableインタフェース
public interface Runnable{
    	public abstract void run();
}

 
 
2.javaを継承する.lang.Threadクラス
ソース:
public class Thread extends Object implements Runnable{
   	public Thread(Runnable target) {
     	    init(null, target, "Thread-" + nextThreadNum(), 0);
   	}
  
   
   public void run() {
       if (target != null) 
           target.run();
       }
}

ThreadクラスはRunnableインタフェースを実装し,run()メソッドを実装していることがわかる.
RunnableオブジェクトをThreadクラスパラメータとして新しいスレッドを作成するとtargetが実行する.run()は,Runnableソケットクラスで書き換えを実現するrun()メソッドを呼び出す.
 
2つの方法の例:
 public class TwoMethod {
		public static void main(String[] args) {
	
			Thread thread = new Thread() {
				public void run() {
					while(true){
						try{
							Thread.sleep(1000);
						} catch(InterruptedException e) {
							e.printStackTrace();
						}
						System.out.println(" ........" + Thread.currentThread().getName());
					}
				}
			};
			thread.start();
			
			Thread thread2 = new Thread(new Runnable(){
				public void run(){
					while(true) {
						try{
							Thread.sleep(1000);
						} catch(InterruptedException e) {
							e.printStackTrace();
						}
						System.out.println(" ........." + Thread.currentThread().getName());
					}
				}
			});
			thread2.start();
	
			//new Thread(){}.start();
			//new Thread(new Runnable(){}).start()
			
			new Thread(new Runnable(){
				public void run() {
					while(true) {
						try{
							Thread.sleep(1000);
						} catch(InterruptedException e) {
							e.printStackTrace();
						}
						System.out.println("Runnable~~~~" + Thread.currentThread().getName());
					}
				}
			}){
				public void run() {   //Thread Runnable , run ,       Runnable run 
					while(true) {
						try{
							Thread.sleep(1000);
						} catch(InterruptedException e) {
							e.printStackTrace();
						}
						System.out.println("thread~~~~" + Thread.currentThread().getName());
					}
				}
			}.start();
		}
	}

スレッド作成方法の2つの比較について:
Javaはクラスのマルチ継承をサポートしていないことは知っていますが、複数のインタフェースを実現することができ、Threadクラスを継承すると、他の親クラスを継承することはできません.
Runnable方式を用いることで,複数のスレッドが同じターゲットオブジェクトを共有し,同じリソースを処理することができ,よりオブジェクト向けの考え方を体現することができる.