資源描述:
《Java并發(fā)編程線程入門簡介》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。
1、Java并發(fā)編程:線程?????從一開始Java就被設計成支持并發(fā)編程的語言,java語言及其核心類庫都有對并發(fā)編程的支持。從5.0開始,Java平臺引入了一些高層的并發(fā)接口。本系列文章將盡可能的概括這些內(nèi)容?! ∵M程與線程 并發(fā)編程模式中,有兩個基本執(zhí)行單元:進程與線程。進程和線程是現(xiàn)代操作系統(tǒng)的基本概念。一個進程擁有獨立完備的執(zhí)行環(huán)境,進程擁有私有的計算機資源,比如獨立的內(nèi)存空間、代碼段、指令寄存器等等。進程在操作系統(tǒng)中基本等同于應用程序。最終用戶看到的獨立程序有可能是多個互相協(xié)作的進程,為了方便進程之間的通信,大多數(shù)操作系統(tǒng)支持進程間通信(InterProcessCommun
2、ication,IPC)資源,比如管道和端口。IPC往往不僅僅在同一臺計算機系統(tǒng)上使用,也往往運用于不同計算機系統(tǒng)之間的通信?! 【€程通常也稱輕量級進程,線程擁有的資源比進程的要少。線程只存在于進程中,一個進程可以包含多個線程。比如一個Java程序中可以有多個線程存在。線程不擁有獨立的內(nèi)存空間,而是和同進程內(nèi)的其他線程共享進程的內(nèi)存空間。由于線程共享進程的資源(內(nèi)存或者打開的文件),同進程的線程之間往往需要大量的互斥和同步,保證資源使用的可確定性。這在前面文章中已經(jīng)說過,資源共享是并發(fā)編程中同步和互斥的根源。 由于進程的特性,使得它們之間資源共享的沖突比較少,因此并發(fā)編程主要是針對
3、線程的,多線程編程是Java程序的基本特征。因此這兒講的并發(fā)編程主要是針對Java線程編程的?! ava線程 簡單來說,每個Java線程都有一個Thread實例與之對應。創(chuàng)建線程對象的方法通常有兩種: 1.直接創(chuàng)建和管理,也就是每當程序需要異步執(zhí)行任務時就實例化一個Thread對象,然后自己管理其生命周期?! ?.抽象線程管理,使其從程序代碼中分離開來。這些接口在java5之后的java.util.concurrency包中提供。 我們先討論第一種方式,java.util.concurrency包提供的高層工具我們在后面的文章再討論?! 〉谝环N方式創(chuàng)建線程非常直接,有兩種方法
4、可以創(chuàng)建一個線程實例: 1.生成一個Runnable對象,并將它傳遞給Thread對象。1publicclassHelloWorldimplementsRunnable{2????publicvoidrun(){3????????System.out.println("HelloWorld");4????}5????publicstaticvoidmain(Stringargs[]){6????????(newThread(newHelloWorld())).start();7????}8}9 2.繼承Thread并實現(xiàn)其run方法:1publicclassHelloThread
5、extendsThread{2????publicvoidrun(){3????????System.out.println("HelloWorld!");4????}5????publicstaticvoidmain(Stringargs[]){6????????(newHelloThread()).start();7????}8}9???????如何選擇使用哪種方式呢?第一種模式更為通用,實現(xiàn)一個Runnable接口允許你繼承并復用某類。第二種更簡單,缺點是必須繼承Thread。你可以根據(jù)具體情況選擇。 Thread對象中定義了一些有用的方法來管理線程的生命周期: 1.pub
6、licstaticvoidsleep(longmillis)throwsInterruptedException方法,該方法掛起當前線程一段時間,主動讓出處理器讓其他線程使用。sleep方法還可以用來控制執(zhí)行的速度。注意這個方法在掛起線程時,有可能被其他線程中斷掛起,因此不能依賴其時間參數(shù)來定時。 2.publicvoidinterrupt()方法,該方法中斷某線程正在做的事情,告訴它某些事情發(fā)生了需要處理。程序員需要捕捉這個中斷異常,并在異常處理中執(zhí)行應該做的動作。接受中斷的方式有兩種,一種是被中斷線程目前正在執(zhí)行一個能拋出InterruptedException的方法,比如sl
7、eep或者Object.wait等方法,還比如一些可以被interrupted的SeverSocket.accept方法等等。下面是示例代碼:1for(inti=0;i