更新時間:2019-05-29 10:39:23 來源:動力節(jié)點 瀏覽3440次
在Java程序中使用多線程要比在C或C++中容易得多,這是因為Java編程語言提供了語言級的支持,以下小編為大家用簡單的編程示例來說明Java程序中的多線程是多么直觀的。希望讀完本文可以幫助大家能夠編寫簡單的多線程程序。
為什么會排隊等待?
下面的這個簡單的Java程序完成四項不相關(guān)的任務(wù)。這樣的程序有單個控制線程,控制在這四個任務(wù)之間線性地移動。此外,因為所需的資源—打印機、磁盤、數(shù)據(jù)庫和顯示屏--由于硬件和軟件的限制都有內(nèi)在的潛伏時間,所以每項任務(wù)都包含明顯的等待時間。因此,程序在訪問數(shù)據(jù)庫之前必須等待打印機完成打印文件的任務(wù),等等。如果您正在等待程序的完成,則這是對計算資源和您的時間的一種拙劣使用。改進此程序的一種方法是使它成為多線程的。
四項不相關(guān)的任務(wù)
classmyclass{staticpublicvoidmain(Stringargs){print_a_file;manipulate_another_file;access_database;draw_picture_on_screen;}}
在本例中,每項任務(wù)在開始之前必須等待前一項任務(wù)完成,即使所涉及的任務(wù)毫不相關(guān)也是這樣。但是,在現(xiàn)實生活中,我們經(jīng)常使用多線程模型。我們在處理某些任務(wù)的同時也可以讓孩子、配偶和父母完成別的任務(wù)。例如,我在寫信的同時可能打發(fā)我的兒子去郵局買郵票。用軟件術(shù)語來說,這稱為多個控制(或執(zhí)行)線程。
可以用兩種不同的方法來獲得多個控制線程:
多個進程
在大多數(shù)操作系統(tǒng)中都可以創(chuàng)建多個進程。當(dāng)一個程序啟動時,它可以為即將開始的每項任務(wù)創(chuàng)建一個進程,并允許它們同時運行。當(dāng)一個程序因等待網(wǎng)絡(luò)訪問或用戶輸入而被阻塞時,另一個程序還可以運行,這樣就增加了資源利用率。但是,按照這種方式創(chuàng)建每個進程要付出一定的代價:設(shè)置一個進程要占用相當(dāng)一部分處理器時間和內(nèi)存資源。而且,大多數(shù)操作系統(tǒng)不允許進程訪問其他進程的內(nèi)存空間。因此,進程間的通信很不方便,并且也不會將它自己提供給容易的編程模型。
線程
線程也稱為輕型進程(LWP)。因為線程只能在單個進程的作用域內(nèi)活動,所以創(chuàng)建線程比創(chuàng)建進程要廉價得多。這樣,因為線程允許協(xié)作和數(shù)據(jù)交換,并且在計算資源方面非常廉價,所以線程比進程更可齲線程需要操作系統(tǒng)的支持,因此不是所有的機器都提供線程。Java編程語言,作為相當(dāng)新的一種語言,已將線程支持與語言本身合為一體,這樣就對線程提供了強健的支持。
相關(guān)閱讀