資源描述:
《java并發(fā)編程:如何創(chuàng)建線程?-java開發(fā)java經(jīng)驗技巧》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Java并發(fā)編程:如何創(chuàng)建線程?-Java開發(fā)Java經(jīng)驗技巧Java并發(fā)編程:如何創(chuàng)建線程?原文出處:海子在前面一篇文章中已經(jīng)講述了在進程和線程的曲來,今天就來講一下在Java中如何創(chuàng)建線程,讓線程去執(zhí)行一個了任務(wù)。卜?面先講述一下J3V3中的應(yīng)用程序和進程相關(guān)的概念知識,然后再闡述如何創(chuàng)建線程以及如何創(chuàng)建進程。下而是本文的目錄大綱:Java中關(guān)于應(yīng)用程序和進程相關(guān)的概念Java中如何創(chuàng)建線程三?J3V3中如何創(chuàng)建進程一.Java中關(guān)于應(yīng)用程序和進程相關(guān)的概念在Java中,一個應(yīng)用程序?qū)?yīng)著一個J
2、VM實例(也有地方稱為JVM進程),一般來說名字默認為java,exe或者javaw.exe(windows下可以通過任務(wù)管理器查看)。Java采用的是單線程編程模型,即在我們自己的程序中如果沒冇主動創(chuàng)建線程的話,只會創(chuàng)建一個線程,通常稱為主線程。但是耍注意,雖然只有一個線程來執(zhí)行任務(wù),不代表JVM中只冇一個線程,JV1實例在創(chuàng)建的時候,同時會創(chuàng)建很多其他的線程(比如垃圾收集器線程)。由于Java采用的是單-線程編程模型,因此在進行UI編程吋要注意將耗吋的操作放在子線程中進行,以避免阻塞主線程(在
3、UT編程時,主線程即UI線程,用來處理用戶的交互事件)。二.Java中如何創(chuàng)建線程在java中如果要創(chuàng)建線程的話,一般有兩種方式:1)繼承Thread類;2)實現(xiàn)Runnable接口。1.繼承Thread類繼承Thread類的話,必須重寫run方法,在run方法小定義需耍執(zhí)彳亍的任務(wù)。classMyThreadextendsThread{privatestaticintnum=0;publicMyThread(){num++;?Overridepublicvoidrun(){System,out.p
4、rintin(,z主動創(chuàng)建的第〃+num+〃個線程〃);}}創(chuàng)建好了自己的線程類之后,就可以創(chuàng)建線程對象了,然后通過start()方法去啟動線程。注意,不是調(diào)用run()方法啟動線程,rim方法中只是定義需要執(zhí)行的任務(wù),如果調(diào)用nm方法,即相當(dāng)于在主線程中執(zhí)行rim方法,跟普通的方法調(diào)用沒有任何區(qū)別,此時并不會創(chuàng)建一個新的線程來執(zhí)行定義的任務(wù)。publicclassTcst{publicstaticvoidmain(String[]args){MyThreadthread=newMyThread()
5、;thread,start();}}classMyThreadextendsThread{privatestaticintnum二0;publicMyThread(){num++;}?Overridepublicvoidrun(){System,out.println(z,主動創(chuàng)建的第"+num+"個線程〃);}}在上面代碼中,通過調(diào)用start()方法,就會創(chuàng)建一個新的線程了。為了分清start()方法調(diào)用和nm()方法調(diào)用的區(qū)別,請看卜?面一個例了:publicclassTest{publics
6、taticvoidmain(Str、ing[]args){System,out.printing主線程ID:Z,+Thread.currentThreadO.getTdO);MyThreadthreadl=newMyThreadC,threadl/,);thread1.start();MyThreadthread2=newMyThread("thread2/z);thread2.r、un();}}classMyThreadextendsThread{privateStringname;publicM
7、yThread(Stringname){this.namc=namc;}?Overridepublicvoidrun(){System,out.printin("name:"+name+"子線程ID:,,+Thrcad?currcntThrc3d()?gctldO);運行結(jié)果:從輸出結(jié)果可以得出以卜?結(jié)論:1)threadl和thread?的線程ID不同,thread2和主線程ID相同,說明通過rim方法調(diào)用并不會創(chuàng)建新的線程,而是在主線程中直接運行run方法,跟普通的方法調(diào)用沒有任何區(qū)別;2)雖然
8、threadl的start方法調(diào)用在thread2的run方法前面調(diào)用,但是先輸出的是thrcad2的run方法調(diào)用的相關(guān)信息,說明新線程創(chuàng)建的過程不會阻塞主線程的后續(xù)執(zhí)行。1.實現(xiàn)Runnable接口在Java中創(chuàng)建線程除了繼承Thread類之外,還可以通過實現(xiàn)Runnable接口來實現(xiàn)類似的功能。實現(xiàn)Runnable接口必須重寫其run方法。下面是一個例了:publicclassTest{publicstaticvoidmain(String[]args){Sys