進程和線程的概述
阿新 • • 發佈:2018-06-25
分配 棧大小 nts 現在 一個 lock tex 等待 兩種方法 1. 程序,線程,進程的概念:
程序:編寫的靜態代碼
進程:程序的一次執行的過程。
線程:能在進程中獨立完成的子任務。
2 Java實現多線程的兩種方法:
繼承Thread類
代碼:
public class MyThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub super.run(); System.out.println("繼承Thread的線程:"+Thread.currentThread().getName()); } public static void main(String[] args) { MyThread thread=new MyThread(); System.out.println("當前運行的線程:"+Thread.currentThread().getName()); thread.start(); } } ################################ 運行結果: 當前運行的線程:main 繼承Thread的線程:Thread-0
註意:main線程不是主函數的main,而是系統的主線程.
Thread.currentThread:表示的是當前運行的線程。
Thread類其實是實現的Runnable接口的:我們看源碼:
public class java.lang.Thread implements java.lang.Runnable {
。。。
}
實現Runnable接口
代碼:
public class MyRun implements Runnable{ public MyRun() { System.out.println("當前運行的線程:"+Thread.currentThread().getName()); } @Override public void run() { // TODO Auto-generated method stub System.out.println("實現Runnable接口:"+Thread.currentThread().getName()); } } public static void main(String[] args) { MyRun run=new MyRun(); Thread thread1=new Thread(run); Thread thread2=new Thread(run); thread1.start(); thread2.start(); } ################################### 結果:當前運行的線程:main 實現Runnable接口:Thread-0 實現Runnable接口:Thread-1
Thread類的構造函數:
構造方法摘要 Thread()???????????分配新的?Thread?對象。 Thread(Runnable?target)???????????分配新的?Thread?對象。 Thread(Runnable?target,?String?name)???????????分配新的?Thread?對象。 Thread(String?name)???????????分配新的?Thread?對象。 Thread(ThreadGroup?group,?Runnable?target)???????????分配新的?Thread?對象。 Thread(ThreadGroup?group,?Runnable?target,?String?name)???????????分配新的?Thread?對象,以便將?target?作為其運行對象,將指定的?name?作為其名稱,並作為?group?所引用的線程組的一員。 Thread(ThreadGroup?group,?Runnable?target,?String?name, long?stackSize)???????????分配新的?Thread?對象,以便將?target?作為其運行對象,將指定的?name?作為其名稱,作為?group?所引用的線程組的一員,並具有指定的堆棧大小。 Thread(ThreadGroup?group,?String?name)???????????分配新的?Thread?對象。
兩種多線程的創建方式的對比
正如前面講的Thread類其實是實現Runnable接口,所以對著兩者比較我們可以引申為時extends和implements的比較。了解Java的繼承和多態的知識就會知道後者好。
原因:第一,Java單一繼承,接口可以多種實現。第二,利用接口有利於降低了程序之間的耦合度
線程之間的狀態:
枚舉常量摘要
BLOCKED???????????受阻塞並且正在等待監視器鎖的某一線程的線程狀態。
NEW???????????至今尚未啟動的線程的狀態。
RUNNABLE???????????可運行線程的線程狀態。
TERMINATED???????????已終止線程的線程狀態。
TIMED_WAITING???????????具有指定等待時間的某一等待線程的線程狀態。
WAITING???????????某一等待線程的線程狀態。
流程圖:
現在我們來講講為什麽用多線程:
現在的cpu發展迅速,從單核的到多核,這時我們將面臨一個問題:如何充分的利用cpu呢?這時多線程的出現解決了這個問題。簡單點來說:線程可以有效地降低程序的開發和維護等成本,同時提升復雜應用程序的性能。
具體的來說:
- 1.發揮多處理器的強大功能
- 2.在單處理器系統上獲得更高的吞吐量
- 3 建模的簡單性
- 4 異步事件的簡化處理
進程和線程的概述