Java併發(1):進程和線程

一、進程和線程的概念理解

搞開發是用程序去完成一個功能,這個功能通常由一個進程實現(也能夠由多個進程實現,如谷歌瀏覽器會開多個進程,在windows任務管理器中能夠看到,而Eclipse只有一個進程);java

這個進程中不一樣的子功能能夠使用不一樣的線程去完成(如聊天程序中,一個線程發送消息,一個線程接收消息)。編程

PS:線程是一個輕量級的進程。windows

進程是對於操做系統的程序運行單元,線程是對於編程語言的運行單元。(如能夠用C或Java開發一個單進程的聊天程序,這個進程能夠在操做系統的任務管理器中看到;而不一樣的編程語言實現線程的方式不一樣,但都能用多線程來完成程序聊天的功能)瀏覽器

 

二、Java中能夠經過Process建立一個操做系統進程,Thread建立一個線程。

PS:進程使用操做系統的任務管理器能夠看到;線程的狀態在建立改線程的主線程中才能看到。多線程

 

三、進程和線程的狀態

操做系統進程狀態: 運行態, 就緒態, 等待態( 阻塞態、封鎖態、睡眠態)併發

java中線程的狀態(java.lang.Thread.State):New/Runnable/Blocked/Wait/Time_wait/Terminated編程語言

[Java併發編程]-線程的六種狀態及其狀態轉換ide

 

四、經過main方法理解線程與進程

Java main方法如何弄清進程問題函數

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線程中能夠查看子線程的運行參數)。

相關文章
相關標籤/搜索