日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

【Java线程】进程与线程

發(fā)布時(shí)間:2024/4/14 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java线程】进程与线程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

進(jìn)程與線程的區(qū)別

1、簡(jiǎn)而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程.
線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。
另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。

2、線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。

3、從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。

4、進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位.

5、線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.

6、一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程;同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行.

7、程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。

實(shí)例解析:

將c盤的內(nèi)容打印到控制臺(tái),在打印過程中,敲回車能將打印過程終止,在敲回車?yán)^續(xù)打印(使用了并發(fā)的效果)

package com.lmb; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader;/*** @author lmb* 將c盤的內(nèi)容打印到控制臺(tái),在打印過程中,敲回車能將打印過程終止,在敲回車?yán)^續(xù)打印(使用了并發(fā)的效果)**///線程類,用于打印磁盤文件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;//循環(huán)打印文件for (int i = 0; i < files.length; i++) {if (flag) {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));try {br.readLine();//監(jiān)聽鍵盤回車flag=false; //當(dāng)鍵盤再次回車時(shí)繼續(xù)打印} 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();//監(jiān)聽鍵盤回車flag = true;//遇到回車停止打}} }

運(yùn)行結(jié)果:

不足:
敲回車中斷打印后,當(dāng)再次敲回車使其繼續(xù)打印時(shí),線程和主程序都運(yùn)行到br.readLine();監(jiān)聽鍵盤的輸入,此時(shí),點(diǎn)擊回車之后,如果鍵盤消息被線程搶到,則繼續(xù)打印;若鍵盤消息被主程序搶到則繼續(xù)中斷打印,所以點(diǎn)擊回車會(huì)出現(xiàn)打印不連貫的情況。

總結(jié)

以上是生活随笔為你收集整理的【Java线程】进程与线程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。