【Java线程】进程与线程
進程與線程的區別
1、簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小于進程,使得多線程程序的并發性高。
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
2、線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
3、從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
4、進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
5、線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
6、一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以并發執行.
7、程和線程的主要差別在于它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發操作,只能用線程,不能用進程。
實例解析:
將c盤的內容打印到控制臺,在打印過程中,敲回車能將打印過程終止,在敲回車繼續打印(使用了并發的效果)
package com.lmb; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader;/*** @author lmb* 將c盤的內容打印到控制臺,在打印過程中,敲回車能將打印過程終止,在敲回車繼續打印(使用了并發的效果)**///線程類,用于打印磁盤文件class Thread01 implements Runnable{public void run() {// TODO Auto-generated method stubFile file=new File("c:\\");AboutThread.print(file);} }public class AboutThread {public static boolean flag=false;//打印文件信息public static void print(File file){File[] files=file.listFiles();if (files == null) return;//循環打印文件for (int i = 0; i < files.length; i++) {if (flag) {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));try {br.readLine();//監聽鍵盤回車flag=false; //當鍵盤再次回車時繼續打印} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}File f=files[i];if (f.isDirectory()) {print(f);}System.out.println(f.getAbsolutePath());}}public static void main(String[] args) throws Exception{Thread thread=new Thread(new Thread01());thread.start();//開啟線程BufferedReader br=new BufferedReader(new InputStreamReader(System.in)) ;for (;;) {br.readLine();//監聽鍵盤回車flag = true;//遇到回車停止打}} }運行結果:
不足:
敲回車中斷打印后,當再次敲回車使其繼續打印時,線程和主程序都運行到br.readLine();監聽鍵盤的輸入,此時,點擊回車之后,如果鍵盤消息被線程搶到,則繼續打印;若鍵盤消息被主程序搶到則繼續中斷打印,所以點擊回車會出現打印不連貫的情況。
總結
以上是生活随笔為你收集整理的【Java线程】进程与线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: I/O流(四)—java如何添加到文件尾
- 下一篇: 【Java线程】多线程实现简单的一对一聊