1. 程式人生 > >Thread.start()和Thread.run()的區別

Thread.start()和Thread.run()的區別

public class RunAndStart
{
	public static void main(String[] ar) throws InterruptedException
	{

		/***
		 * 1.只有start()才真正實現了多執行緒執行。<br>
		 * 這時無需等待run方法體程式碼執行完畢,不同執行緒的run()方法交替執行;<br>
		 * 通過呼叫Thread類的start()方法來啟動一個執行緒, 這時此執行緒是處於就緒狀態, 並沒有執行。<br>
		 * 然後通過此Thread類呼叫方法run()來完成其執行操作的, <br>
		 * 這裡方法run()稱為執行緒體,它包含了要執行的這個執行緒的內容,Run方法執行結束,此執行緒終止。 <br>
		 * <br>
		 * <br>
		 * 2.如果只是呼叫run()方法那麼程式還是同步執行。<br>
		 * 程式還是要順序執行,要等待一個run()執行完畢後,才可繼續執行下面的程式碼;<br>
		 * 程式執行路徑還是隻有一條, 這樣就沒有達到寫執行緒的目的。
		 */
		for (int i = 0; i < 3; i++)
		{
			MyThread t = new MyThread();
			t.run();
			// t.start();
		}

		while (true)
		{
			System.out.println("main thread.....");
			TimeUnit.SECONDS.sleep(1);
		}
	}
}

class MyThread extends Thread
{
	private static int count = 0;

	private int NO = 0;

	public MyThread()
	{
		this.NO = count++;
	}

	@Override
	public void run()
	{
		long time = System.currentTimeMillis();
		while (System.currentTimeMillis() - time < 5000)
		{
			System.out.println(NO + "——Running...");
			try
			{
				// Thread.sleep(1000);
			}
			catch (Exception e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}