⑴ java 主線程結束,子線程會結束嗎
如果你說的是「進程」的話,那麼就派簡會退出。一個進程的退出,那麼其裡面的所有東西都會釋放。 但是,如果你是在一個進程裡面,建立線程P,然後再在肢前線程P裡面創建並且運行線程C1、c2等,那麼歷羨清,當線程P退出的時候,線程c1 c2是不會退出的。
⑵ 主程序和子程序之間有何區別
通俗來講,主程序是一個程序中最先執行的部分,在主程序中可以調用某個或某些子程序,這些個子程序結束後依然回到主程序。
舉幾個例悶漏子,
Pascal里的主程序部分在沒有任何前綴形容的一對begin
end.里;
C/C++里的主程序部分在函數main()中,標准C的返回值悶慶為int,VC中可以為void;螞罩握
Java里的主程序部分在方法main()中,必須是public
static
void類型的。
⑶ java是否存在父線程子線程之說
1、java程序是允許在java虛擬中的,也就是JVM中,所有的java程序在JVM中都是以線程的形式運內行的,java沒有進程之容說,只有線程。這點好理解吧。
2、當使用javaAPI創建一個外部進程,比如java調用一個shell腳本,
例子:
Process p= Runtime.getRuntime().exec(「echo 123」);
這時候Process就派上用場了,調用其API可以獲得其運行狀態,包括:輸入流,輸出流,錯物流,完結狀態。可是記住,創建的這個進程並不是在JVM中運行的。
3、java的線程操縱是Thread,Runnable,ThreadGroup,和concurrent包里的東西,有興趣可以自己學
4、多線程的時候,父線程創建很多線程運行, 可以獲得被創建線程的運行狀態,操縱子線程,多線程比較復雜,建議單獨學習。
PS:碼字好累。。。
⑷ 用java設計一程序,由一個進程創建三個子進程,三個子進程一個是生產者進程,兩個是消費者進程,
setInterval(函數名橋圓春,1000); t: Timer = new Timer(1000, 5); t.addEventListener(TimerEvent.TIMER,函敏耐腔渣數名); t.addEventListener(TimerEvent.TIMER_COMPLETE, 函數名); t.start();
⑸ 在java裡面什麼是線程,什麼是主線程主線程和子線程的關系
首先,java里的線程沒有主和子的說法,只有線程優先順序的說法,也許你說的是進程和線程吧,下面是詳細資料
線程是指進程內的一個執行單元,也是進程內的可調度實體.與進程的區別:
(1)地址空間:進程內的一個執行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有自己獨立的地址空間;
(2)資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源
(3)線程是處理器調度的基本單位,但進程不是.
(4)二者均可並發執行.
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的並發性。進程和線程的區別在於:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小於進程,使得多線程程序的並發性高。
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行.
⑹ Copy on write 機制
Copy on write 思想:
1) redis RDB機制的優化
redis 提供了類似於 snapshot+commitlog的方式,對應叫做RDB 和aof
RDB在做快照的時候,需要考慮到性能和內存使用。
比如在時間t,redis 有1G的數據,redis 會新開一個 fork 子進程
主進程對外提供服務,由子進程拷貝數據到文件。
子進程使用了linux 的 on write 機制。
讓主進程和子進程 共享1G的內襪旁培存數據。如果沒有寫操作,不需要額外的空間。
如果有寫操作,read-only的這段內存就會發生page-fault, 子啟棚進程處理這個異常,只拷貝對應的數據
做到一個按需拷貝的機制,大大節省內存。
2) 在java中也有一個 -on-write 的 集合 CopyOnWriteArrayList
這是一種多線程優化技術,讀的時候不加鎖。
寫的時候,加鎖拷貝一份數據集,修改內容;但是同時開放讀操作。對於一些讀多寫少的數據,這種做法的確很不錯。
缺點是,拷貝期間讀取老數據,拷貝的是整個數據集,如果數據集比較大,會佔用額外告唯內存,可能觸發GC。
相比而言,linux底層實現的 on write 機制則是優秀的多,因為只需要拷貝 page-fault的那一頁。
⑺ java 主線程已經執行完了,為什麼子線程還在運行
其實是子線程運行結束後主線程才退出的。因為是子線程開啟後,主線程和子線程的代碼同時繼續運行。當主線程的代碼全部執行完後,若子線程還沒執行完,主線程會等待子線程執行結束後退出程序。
⑻ java process 怎麼創建主進程,在根據主進程創建子進程處理自己想要出路的邏輯
createprocess
waitforsingleobject
closehandle
memset(各種數據結構)
createprocess
//隨意手寫,沒具體實測,LZ看看思路,具體需要LZ的實際部分代碼進行分析