1. 程式人生 > >線程及其創建的方式

線程及其創建的方式

發揮 接收 狀態 height span this i/o system string

線程主要發揮作用的時候:當一個線程所運行的I/O被堵塞的時候,同一進程中的其它線程能夠使用CPU來進行計算。

這樣。就提高了程序的運行效率。
狀態:執行、就緒(等待被調用)、堵塞(等待I/O資源)
兩種創建方法

  1. 繼承Thread類,並override當中的run()方法(當一個類沒有繼承其它類的時候。適合用這樣的方法)
  2. 實現Runnable接口,並實現run()方法(當一個類已經繼承另外一個類的時候。適合用這樣的方法)
通過使用自己定義的構造方法傳遞各種參數。 啟動:獲得Thread對象後調用start()方法。
方法一:繼承Thread類
public class MyThread1 extends Thread {
    public MyThread1(String name) {
        super(name);
    }

    public void run() {
        System.out.println(this.getName()); 
    }

    public static void main(String[] args) {
        Thread t1 = new MyThread1("阿三");
        t1.start();  
    }  
}

方法二:實現Runnable接口
public class MyThread implements Runnable {

 private String name;
 
 public MyThread(String name) {
  this.name = name;
 }
 
 @Override
 public void run() {
    System.out.println(name); 
 } 
 
 public static void main(String[] args) {
  Thread tt1 = new Thread(new MyThread("張三"));
  tt1.start(); 
 } 
}

普通情況下,能夠使用一個內部類來定義另外一個線程:
/**
 * 啟動子線程的方式(使用內部類定義另外一個線程)
 * @author XuJijun
 *
 */
public class MyThread {
	public static void main(String[] args) {
		(new MyThread()).new AnotherThread("張三").start();
	}
	
	/**
	 * 內部類,實現子線程 
	 *
	 */
	private class AnotherThread extends Thread{
		private String msg;
		
		/*
		 * 加一個參數,用於接收主線程的信息
		 */
		public AnotherThread(String msg) {
			super();
			this.msg = msg;
		}

		@Override
		public void run() {
			System.out.println("Hello " + msg);
		}
	}
}

等待和喚醒機制: 使用Object.wait()和Object.notify(),必須在同步方法或同步塊裏調用 使用join()方法等待另外一個線程的終止,如:
a.join();
System.out.print("End"); //等待線程a結束後再打印出“End”

sleep()和wait()的差別
  • sleep():占用CPU資源。或被調度走變成就緒狀態
  • wait():不占用CPU資源。等待被notify()喚醒

(原創文章,轉載請註明轉自Clement-Xu的csdn博客:http://blog.csdn.net/clementad/article/details/47027425


線程及其創建的方式