JAvaマルチスレッドを作成する2つの方法


/*
スレッドを作成する最初の方法:Threadクラスを継承します.
スレッドを作成する第2の方法:Runnableインタフェースを実装します.
1,定義クラス実装Runnableインタフェース.
2,インタフェース内のrunメソッドを上書きし,スレッドのタスクコードをrunメソッドにカプセル化する.
3,Threadクラスによりスレッドオブジェクトを作成し,RunnableインタフェースのサブクラスオブジェクトをThreadクラスのコンストラクタのパラメータとして渡す.
どうして?スレッドのタスクはすべてRunnableインタフェースのサブクラスオブジェクトのrunメソッドにカプセル化されているからです.
したがって、スレッドオブジェクトの作成時に実行するタスクを明確にする必要があります.
4,スレッドオブジェクトを呼び出すstartメソッドはスレッドを開く.
Runnableインタフェースのメリット:
1,スレッドのタスクをスレッドのサブクラスから分離し,個別のカプセル化を行った.
対象に向かう思想に従ってタスクを対象にカプセル化する.
2,java単一継承の限界を回避した.
したがって、スレッドを作成する第2の方法は一般的です.
*/
package cn.thread.create;

public final class CreateThreadDemo2 extends Thread {
	private String name;
	CreateThreadDemo2(String name)
	{
		//super(name);
		this.name = name;
	}
	public void run()
	{
		for(int x=0; x<10; x++)
		{
			//for(int y=-9999999; y<999999999; y++){}
			System.out.println(name+"....x="+x+".....name="+Thread.currentThread().getName());
		}
	}
}

class ThreadDemo2 
{
	public static void main(String[] args) 
	{

		/*
		                  ,                   。
		
		                   。

		jvm                  。

		               ?
		Thread       ,        。  Thread        。
		       Thread   run     。    ,run                  。
		
		run                 。

		             ,      Thread ,   run  。
		         run     。 
		*/
//
//		Thread t1 = new Thread();

		CreateThreadDemo2 d1 = new CreateThreadDemo2("  ");
		CreateThreadDemo2 d2 = new CreateThreadDemo2("xiaoqiang");
		d1.start();//    ,  run  。
		
		d2.start();
		System.out.println("over...."+Thread.currentThread().getName());
	}
}
package cn.thread.create;

public class CreateThreadDemo3 implements Runnable {

	@Override
	public void run()
	{
		show();
	}
	public void show()
	{
		for(int x=0; x<20; x++)
		{
			System.out.println(Thread.currentThread().getName()+"....."+x);
		}
	}

}

class  ThreadDemo
{
	public static void main(String[] args) 
	{	
		CreateThreadDemo3 d = new CreateThreadDemo3();
		Thread t1 = new Thread(d);
		Thread t2 = new Thread(d);
		t1.start();
		t2.start();


	}
}