搞開發是用程序去完成一個功能,這個功能通常由一個進程實現(也能夠由多個進程實現,如谷歌瀏覽器會開多個進程,在windows任務管理器中能夠看到,而Eclipse只有一個進程);java
這個進程中不一樣的子功能能夠使用不一樣的線程去完成(如聊天程序中,一個線程發送消息,一個線程接收消息)。編程
PS:線程是一個輕量級的進程。windows
進程是對於操做系統的程序運行單元,線程是對於編程語言的運行單元。(如能夠用C或Java開發一個單進程的聊天程序,這個進程能夠在操做系統的任務管理器中看到;而不一樣的編程語言實現線程的方式不一樣,但都能用多線程來完成程序聊天的功能)瀏覽器
PS:進程使用操做系統的任務管理器能夠看到;線程的狀態在建立改線程的主線程中才能看到。多線程
操做系統進程狀態: 運行態, 就緒態, 等待態( 阻塞態、封鎖態、睡眠態)併發
java中線程的狀態(java.lang.Thread.State):New/Runnable/Blocked/Wait/Time_wait/Terminated編程語言
package com.demo; public class Test02 { public static void main(String[] args) { Ps p1 = new Ps(); p1.start(); Ps p2 = new Ps(); p2.start(); while(true){ System.out.println(System.currentTimeMillis()+"\t"+Thread.currentThread().getName()); } } } class Ps extends Thread{ @Override public void run() { while(true){ System.out.println(System.currentTimeMillis()+"\t"+this.getName()); } } }
在命令行編譯執行,在任務管理器能夠看到java.exe進程this
而在main線程中,能夠獲取子線程的運行參數。
PS:執行java com.demo.Test02 運行main函數時,操做系統新建立一個新的JVM並分配資源(內存/cpu等)給該進程,而後JVM加載字節碼文件並解釋執行(運行main方法);執行過程當中在main線程中又建立兩個子線程並啓動子線程(在main線程中能夠查看子線程的運行參數)。