本文目錄一覽:
java 中線程與進程的區別是什麼?
進程,是針對於操作系統而言的
線程,是java中一個重要的類,主要用來多個方法一起執行
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的並發性。進程和線程的區別在於:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小於進程,使得多線程程序的並發性高。
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行.
如何查看java進程及服務?
滑鼠放在電腦桌面底部右擊,選擇任務管理器,就能看到你想看的了
Java進程怎麼實現?
Java中多進程編程的實現,和多線程一樣,多進程同樣是實現並發的一種方式,需要的朋友可以參考下
1.Java進程的創建
Java提供了兩種方法用來啟動進程或其它程序:
(1)使用Runtime的exec()方法
(2)使用ProcessBuilder的start()方法
1.1 ProcessBuilder
ProcessBuilder類是J2SE 1.5在java.lang中新添加的一個新類,此類用於創建操作系統進程,它提供一種啟動和管理進程(也就是應用程序)的方法。在J2SE 1.5之前,都是由Process類處來實現進程的控制管理。
每個 ProcessBuilder 實例管理一個進程屬性集。start() 方法利用這些屬性創建一個新的 Process 實例。start() 方法可以從同一實例重複調用,以利用相同的或相關的屬性創建新的子進程。
每個進程生成器管理這些進程屬性:
命令 是一個字元串列表,它表示要調用的外部程序文件及其參數(如果有)。在此,表示有效的操作系統命令的字元串列表是依賴於系統的。例如,每一個總體變數,通常都要成為此列表中的元素,但有一些操作系統,希望程序能自己標記命令行字元串——在這種系統中,Java 實現可能需要命令確切地包含這兩個元素。
環境 是從變數 到值 的依賴於系統的映射。初始值是當前進程環境的一個副本(請參閱 System.getenv())。
工作目錄。默認值是當前進程的當前工作目錄,通常根據系統屬性 user.dir 來命名。
redirectErrorStream 屬性。最初,此屬性為 false,意思是子進程的標準輸出和錯誤輸出被發送給兩個獨立的流,這些流可以通過 Process.getInputStream() 和 Process.getErrorStream() 方法來訪問。如果將值設置為 true,標準錯誤將與標準輸出合併。這使得關聯錯誤消息和相應的輸出變得更容易。在此情況下,合併的數據可從 Process.getInputStream() 返回的流讀取,而從 Process.getErrorStream() 返回的流讀取將直接到達文件尾。
如何用Java關閉一個進程
解決這個問題,要看這個進程是java程序自定義的進程,還是操作系統的進程,操作系統的進程,又可以分為windows進程和Linux進程
一、針對操作系統的進程:
1,首先java用戶,要具有操作進程的許可權
2. 針對windows操作系統的進程,比如QQ進程:
String command = “taskkill /f /im QQ.exe”;
Runtime.getRuntime().exec(command);
其中:taskkill 是命令名稱,/f /im 是參數,QQ.exe是進程的可執行文件。
3.針對Linux操作系統
String command = “kill /f /im QQ.exe”;
Runtime.getRuntime().exec(command);
二、在Java程序中自定義的進程
思路:在線程中設置一個標誌變數,當這個變數的值在外界被改變的時候,有機會結束運行的線程
public class T {
public static void main(String[] args) {
// 啟動線程
MyThread thread = new MyThread();
new Thread(thread).start();
// 你的其它的工作,此時線程在運行中
// 你不想讓線程幹活了,停掉它
// 注意,這只是一個標誌,具體線程何時停,並不能精確控制
thread.allDone = true;
}
}
class MyThread implements Runnable {
boolean volatile allDone = false;
public void run() {
// 每次循環都檢測標誌
// 如果設置停止標誌時已經在循環里
// 則最長需要等待一個循環的時間才能終止
while (!allDone) {
// 循環里的工作
}
}
}
java查看進程?
進程?我不太了解。但是要是線程是可以的,因為每個線程有個id,而且你也可以給線程設置名稱。這樣的話,你可以根據id號或名字來查看線程當前的狀態
Java進程和線程有什麼區別?
概念】
進程:是並發執行的程序在執行過程中分配和管理資源的基本單位,競爭計算機系統資源的基本單位。
線程:是進程的一個執行單元,是進程內科調度實體。比進程更小的獨立運行的基本單位。線程也被稱為輕量級進程。
一個程序由一個或多個進程組成,一個進程由一個或多個線程組成。1
【進程 線程的區別】
1.地址空間:
進程之間是獨立的地址空間,但同一進程的線程共享本進程的地址空間。1
2.資源佔用
同一進程內的線程共享本進程的資源如內存、I/O、cpu等,但是進程之間的資源是獨立的。1
3.健壯性
一個進程崩潰後,在保護模式下不會對其他進程產生影響;
一個線程崩潰整個進程都死掉,所以多進程要比多線程健壯。123
4.執行過程
進程可以獨立執行,且每個獨立的進程程有一個程序運行的入口、順序執行序列和程序入口。
線程不能獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。線程是處理器調度的基本單位,但是進程不是。123
5.並發和資源消耗
兩者均可並發執行。
進程切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用線程要好於進程。
如果要求同時進行並且又要共享某些變數的並發操作,只能用線程不能用進程
原創文章,作者:EMDM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/141709.html