線程都沒了解過,你還敢說學過Java嗎?

線程

線程是調度CPU的最小單元,也叫輕量級進程LWP (Light Weight Process)。

兩個模型:

  1. 用戶線程(ULT):用戶程序實現,不依賴操作系統核心,應用提供創建、同步、調度和管理線程的函數來控制用戶線程。不需要用戶態/核心態切換,速度快。內核對ULT無感知,線程阻塞則進程(包括它的所有線程)阻塞
  2. 內核線程(KLT):系統內核管理線程(KLT),內核保存線程的狀態和上下文信息,線程阻塞不會引起進程阻塞。在多處理器系統上,多線程在多處理器上並行運行。線程的創建、調度和管理由內核完成,效率比ULT要慢,比進程操作快

在這裏插入圖片描述

線程和進程

多進程:在操作系統中能(同時)運行多個任務(程序)

多線程:在同應用程序中有多 個順序流(同時)執行

創建線程

方式1 :

  1. 自定義類繼承Thread
  2. 重寫run()方法
  3. 在run()方法中增加子線程中要做的事情
  4. 創建自定義線程類對象
  5. 調用自定義線程類對象的start()方法 (只能調用一次)
    由於Java只支持單繼承,用這種方法定義的類不能再繼承其他類
public class Test {

	public static void main(String[] args) {

		new Thread() {
			public void run() {
				for (int i = 0; i < 100; i++) {
					System.out.println("A:" + i);
				}
			}
		}.start();
		for (int i = 0; i < 100; i++) {
			System.out.println("B:" + i);
		}
	}
}
線程的框架在這裏插入圖片描述
方式1代碼:
public class MyThread extends Thread {

	@Override
	public void run() {
		while(true) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("A");
		}
	}
}
public class Test {

	public static void main(String[] args) {

		MyThread myThread = new MyThread();
		myThread.start();
		while (true) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("B");
		}
	}
}

方式2

  1. 自定義類實現Runnable接口
  2. 實現抽象方法run方法
  3. 在run方法中增加子線程中要做的事情
  4. 創建自定義線程類對象
  5. 創建一個 Thread對象, 把自定義線程類對象作爲Thread構造 器
  6. 調用Thread對象的start方法啓動線程
方式2代碼:
public class MyRunnable implements Runnable {

	@Override
	public void run() {
		while(true) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("A");
		}
	}

}
public class Test2 {

	public static void main(String[] args) {
		MyRunnable mr=new MyRunnable();
		Thread r=new Thread(mr);
		r.start();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章