版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
java線程知識(shí)點(diǎn)總結(jié)java線程寫(xiě)法(5篇)java線程學(xué)問(wèn)點(diǎn)總結(jié)java線程寫(xiě)法篇二
線程編程方面
60、java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法?stop()和suspend()方法為何不推舉使用?
答:有兩種實(shí)現(xiàn)方法,分別是繼承thread類(lèi)與實(shí)現(xiàn)runnable接口用synchronized關(guān)鍵字修飾同步方法
反對(duì)使用stop(),是由于它擔(dān)心全。它會(huì)解除由線程獵取的全部鎖定,而且假如對(duì)象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問(wèn)題所在。suspend()方法簡(jiǎn)單發(fā)生死鎖。調(diào)用suspend()的時(shí)候,目標(biāo)線程會(huì)停下來(lái),但卻仍舊持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪問(wèn)鎖定的資源,除非被“掛起”的線程恢復(fù)運(yùn)行。對(duì)任何線程來(lái)說(shuō),假如它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會(huì)造成死鎖。所以不應(yīng)當(dāng)使用suspend(),而應(yīng)在自己的thread類(lèi)中置入一個(gè)標(biāo)志,指出線程應(yīng)當(dāng)活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)當(dāng)掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個(gè)notify()重新啟動(dòng)線程。61、sleep()和wait()有什么區(qū)分?答:sleep是線程類(lèi)(thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行時(shí)機(jī)給其他線程,但是監(jiān)控狀態(tài)依舊保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋放對(duì)象鎖。
wait是object類(lèi)的方法,對(duì)此對(duì)象調(diào)用wait方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify方法(或notifyall)后本線程才進(jìn)入對(duì)象鎖定池預(yù)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。
62、同步和異步有何異同,在什么狀況下分別使用他們?舉例說(shuō)明。
答:假如數(shù)據(jù)將在線程間共享。例如正在寫(xiě)的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫(xiě)過(guò)了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必需進(jìn)展同步存取。
當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,并且不盼望讓程序等待方法的返回時(shí),就應(yīng)當(dāng)使用異步編程,在許多狀況下采納異步途徑往往更有效率。63、啟動(dòng)一個(gè)線程是用run()還是start()?答:?jiǎn)?dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由jvm調(diào)度并執(zhí)行。這并不意味著線程就會(huì)馬上運(yùn)行。run()方法可以產(chǎn)生必需退出的標(biāo)志來(lái)停頓一個(gè)線程。
64、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?答:不能,一個(gè)對(duì)象的一個(gè)synchronized方法只能由一個(gè)線程訪問(wèn)。
我認(rèn)為:其他線程可以進(jìn)入非synchronized方法,但不能進(jìn)入這個(gè)對(duì)象的synchronized方法。65、請(qǐng)說(shuō)出你所知道的線程同步的方法。
答:wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock。
sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕獲interruptedexception特別。
notify():喚醒一個(gè)處于等待狀態(tài)的線程,留意的是在調(diào)用此方法的時(shí)候,并不能準(zhǔn)確的喚醒某一個(gè)等待狀態(tài)的線程,而是由jvm確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。
allnotity():喚醒全部處入等待狀態(tài)的線程,留意并不是給全部喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。
66、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承thread類(lèi)與實(shí)現(xiàn)runnable接口同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify67、線程的根本概念、線程的根本狀態(tài)以及狀態(tài)之間的關(guān)系
答:線程指在程序執(zhí)行過(guò)程中,能夠執(zhí)行程序代碼的一個(gè)執(zhí)行單位,每個(gè)程序至少都有一個(gè)線程,也就是程序本身。
java中的線程有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、完畢
68、的異同?答:主要一樣點(diǎn):lock能完成synchronized所實(shí)現(xiàn)的全部功能
主要不同點(diǎn):lock有比synchronized更準(zhǔn)確的線程語(yǔ)義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖,而lock肯定要求程序員手工釋放,并且必需在finally從句中釋放。
jsp方面
69、forward和redirect的區(qū)分
答:forward是效勞器懇求資源,效勞器直接訪問(wèn)目標(biāo)地址的url,把那個(gè)url的響應(yīng)內(nèi)容讀取過(guò)來(lái),然后把這些內(nèi)容再發(fā)給掃瞄器,掃瞄器根本不知道效勞器發(fā)送的內(nèi)容是從哪兒來(lái)的,所以它的地址欄中還是原來(lái)的地址。
redirect就是效勞端依據(jù)規(guī)律,發(fā)送一個(gè)狀態(tài)碼,告知掃瞄器重新去懇求那個(gè)地址,一般來(lái)說(shuō)掃瞄器會(huì)用剛剛懇求的全部參數(shù)重新懇求,所以session,request參數(shù)都可以獵取。70、jsp有哪些內(nèi)置對(duì)象?作用分別是什么?
答:jsp共有以下9種根本內(nèi)置組件(可與asp的6種內(nèi)部組件相對(duì)應(yīng)):
request用戶(hù)端懇求,此懇求會(huì)包含來(lái)自get/post懇求的參數(shù)
response網(wǎng)頁(yè)傳回用戶(hù)端的回應(yīng)
pagecontext網(wǎng)頁(yè)的屬性是在這里治理
session與懇求有關(guān)的會(huì)話期
applicationservlet正在執(zhí)行的內(nèi)容
out用來(lái)傳送回應(yīng)的輸出configservlet的構(gòu)架部件
pagejsp網(wǎng)頁(yè)本身
exception針對(duì)錯(cuò)誤網(wǎng)頁(yè),未捕獲的例外
71、jsp有哪些動(dòng)作?作用分別是什么?答:jsp共有以下6種根本動(dòng)作
jsp:include:在頁(yè)面被懇求的時(shí)候引入一個(gè)文件。
jsp:usebean:查找或者實(shí)例化一個(gè)javabean。
jsp:setproperty:設(shè)置javabean的屬性。
jsp:getproperty:輸出某個(gè)javabean的屬性。
jsp:forward:把懇求轉(zhuǎn)到一個(gè)新的頁(yè)面。
jsp:plugin:依據(jù)掃瞄器類(lèi)型為java插件生成object或embed標(biāo)記72、jsp中動(dòng)態(tài)include與靜態(tài)include的區(qū)分?
答:動(dòng)態(tài)include用jsp:include動(dòng)作實(shí)現(xiàn)
它總是會(huì)檢查所含文件中的變化,適合用于包含動(dòng)態(tài)頁(yè)面,并且可以帶參數(shù)
靜態(tài)include用include偽碼實(shí)現(xiàn),定不會(huì)檢查所含文件的變化,適用于包含靜態(tài)頁(yè)面
%@includefile=“”%73、兩種跳轉(zhuǎn)方式分別是什么?有什么區(qū)分?答:有兩種,分別為:
前者頁(yè)面不會(huì)轉(zhuǎn)向include所指的頁(yè)面,只是顯示該頁(yè)的結(jié)果,主頁(yè)面還是原來(lái)的頁(yè)面。執(zhí)行完后還會(huì)回來(lái),相當(dāng)于函數(shù)調(diào)用。并且可以帶參數(shù).后者完全轉(zhuǎn)向新頁(yè)面,不會(huì)再回來(lái)。相當(dāng)于goto語(yǔ)句。</jsp:include74、jsp的內(nèi)置對(duì)象及方法。
答:request表示httpservletrequest對(duì)象。它包含了有關(guān)掃瞄器懇求的信息,并且供應(yīng)了幾個(gè)用于獵取cookie,header,和session數(shù)據(jù)的有用的方法。
response表示httpservletresponse對(duì)象,并供應(yīng)了幾個(gè)用于設(shè)置送回掃瞄器的響應(yīng)的方法(如cookies,頭信息等)
ter的一個(gè)實(shí)例,并供應(yīng)了幾個(gè)方法使你能用于向掃瞄器回送輸出結(jié)果。
ntext對(duì)象。它是用于便利存取各種范圍的名字空間、servlet相關(guān)的對(duì)象的api,并且包裝了通用的servlet相關(guān)功能的方法。
ssion對(duì)象。session可以存貯用戶(hù)的狀態(tài)信息
applicatontcontext對(duì)象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息
tconfig對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)。page表示從該頁(yè)面產(chǎn)生的一個(gè)servlet實(shí)例
servlet方面
75、說(shuō)一說(shuō)servlet的生命周期?
答:servlet有良好的生存期的定義,包括加載和實(shí)例化、初始化、處理懇求以及效勞完畢。t接口的init,service和destroy方法表達(dá)。servlet被效勞器實(shí)例化后,容器運(yùn)行其init方法,懇求到達(dá)時(shí)運(yùn)行其service方法,service方法自動(dòng)派遣運(yùn)行與懇求對(duì)應(yīng)的doxxx方法(doget,dopost)等,當(dāng)效勞器打算將實(shí)例銷(xiāo)毀的時(shí)候調(diào)用其destroy方法。
與cgi的區(qū)分在于servlet處于效勞器進(jìn)程中,它通過(guò)多線程方式運(yùn)行其service方法,一個(gè)實(shí)例可以效勞于多個(gè)懇求,并且其實(shí)例一般不會(huì)銷(xiāo)毀,而cgi對(duì)每個(gè)懇求都產(chǎn)生新的進(jìn)程,效勞完成后就銷(xiāo)毀,所以效率上低于servlet。
76、javaservletapi中forward()與redirect()的區(qū)分?
答:前者僅是容器中掌握權(quán)的轉(zhuǎn)向,在客戶(hù)端掃瞄器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),掃瞄器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送懇求鏈接。這樣,從掃瞄器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿意需要時(shí),盡量使用forward()方法,并且,這樣也有助于隱蔽實(shí)際的鏈接。在有些狀況下,比方,需要跳轉(zhuǎn)到一個(gè)其它效勞器上的資源,則必需使用sendredirect()方法。77、servlet的根本架構(gòu)答:
publicclassservletnameextendshttpservlet{publicvoiddopost(httpservletrequestrequest,httpservletresponseresponse)throwsservletexception,ioexception{}publicvoiddoget(httpservletrequestrequest,httpservletresponseresponse)throwsservletexception,ioexception{}}
78、什么狀況下調(diào)用doget()和dopost()?
答:jsp頁(yè)面中的form標(biāo)簽里的method屬性為get時(shí)調(diào)用doget(),為post時(shí)調(diào)用dopost()。79、servlet的生命周期
答:web容器加載servlet,生命周期開(kāi)頭。通過(guò)調(diào)用servlet的init()方法進(jìn)展servlet的初始化。通過(guò)調(diào)用service()方法實(shí)現(xiàn),依據(jù)懇求的不同調(diào)用不同的do***()方法。完畢效勞,web容器調(diào)用servlet的destroy()方法。
80、如何現(xiàn)實(shí)servlet的單線程模式答:%@pageisthreadsafe=“false”%81、頁(yè)面間對(duì)象傳遞的方法
答:request,session,application,cookie等
82、jsp和servlet有哪些一樣點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?
答:jsp是servlet技術(shù)的擴(kuò)展,本質(zhì)上是servlet的簡(jiǎn)易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。jsp編譯后是“類(lèi)servlet”。servlet和jsp最主要的不同點(diǎn)在于,servlet的應(yīng)用規(guī)律是在java文件中,并且完全從表示層中的html里分別開(kāi)來(lái)。的文件。jsp側(cè)重于視圖,servlet主要用于掌握規(guī)律。83、四種會(huì)話跟蹤技術(shù)
答:會(huì)話作用域servletsjsp頁(yè)面描述
page否是代表與一個(gè)頁(yè)面相關(guān)的對(duì)象和屬性。一個(gè)頁(yè)面由一個(gè)編譯好的javaservlet類(lèi)(可以帶有任何的include指令,但是沒(méi)有include動(dòng)作)表示。這既包括servlet又包括被編譯成servlet的jsp頁(yè)面
request是是代表與web客戶(hù)機(jī)發(fā)出的一個(gè)懇求相關(guān)的對(duì)象和屬性。一個(gè)懇求可能跨越多個(gè)頁(yè)面,涉及多個(gè)web組件(由于forward指令和include動(dòng)作的關(guān)系)
session是是代表與用于某個(gè)web客戶(hù)機(jī)的一個(gè)用戶(hù)體驗(yàn)相關(guān)的對(duì)象和屬性。一個(gè)web會(huì)話可以也常常會(huì)跨越多個(gè)客戶(hù)機(jī)懇求
application是是代表與整個(gè)web應(yīng)用程序相關(guān)的對(duì)象和屬性。這實(shí)質(zhì)上是跨越整個(gè)web應(yīng)用程序,包括多個(gè)頁(yè)面、懇求和會(huì)話的一個(gè)全局作用域84、request對(duì)象的主要方法答:
setattribute(stringname,object):設(shè)置名字為name的request的參數(shù)值getattribute(stringname):返回由name指定的屬性值
getattributenames():返回request對(duì)象全部屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例getcookies():返回客戶(hù)端的全部cookie對(duì)象,結(jié)果是一個(gè)cookie數(shù)組getcharacterencoding():返回懇求中的字符編碼方式getcontentlength():返回懇求的body的長(zhǎng)度
getheader(stringname):獲得http協(xié)議定義的文件頭信息getheaders(stringname):返回指定名字的requestheader的全部值,結(jié)果是一個(gè)枚舉的實(shí)例getheadernames():返回所以requestheader的名字,結(jié)果是一個(gè)枚舉的實(shí)例getinputstream():返回懇求的輸入流,用于獲得懇求中的數(shù)據(jù)getmethod():獲得客戶(hù)端向效勞器端傳送數(shù)據(jù)的方法
getparameter(stringname):獲得客戶(hù)端傳送給效勞器端的有name指定的參數(shù)值
getparameternames():獲得客戶(hù)端傳送給效勞器端的全部參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例getparametervalues(stringname):獲得有name指定的參數(shù)的全部值getprotocol():獵取客戶(hù)端向效勞器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱(chēng)getquerystring():獲得查詢(xún)字符串
getrequesturi():獵取發(fā)出懇求字符串的客戶(hù)端地址getremoteaddr():獵取客戶(hù)端的ip地址getremotehost():獵取客戶(hù)端的名字
getsession([booleancreate]):返回和懇求相關(guān)sessiongetservername():獵取效勞器的名字
getservletpath():獵取客戶(hù)端所懇求的腳本文件的路徑getserverport():獵取效勞器的端口號(hào)
removeattribute(stringname):刪除懇求中的一個(gè)屬性
85、我們?cè)趙eb應(yīng)用開(kāi)發(fā)過(guò)程中常常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個(gè)某種編碼的字符串?答:
publicstringtranslate(stringstr){stringtempstr=““;try{tempstr=newstring(es(”iso-8859-1“),”gbk“);tempstr=();}catch(exceptione){n(sage());}returntempstr;}86、servlet執(zhí)行時(shí)一般實(shí)現(xiàn)哪幾個(gè)方法?答:
publicvoidinit(servletconfigconfig)publicservletconfiggetservletconfig()publicstringgetservletinfo()publicvoidservice(servletrequestrequest,servletresponseresponse)publicvoiddestroy()
jdbc、jdo方面88、jdo是什么?
87、e的作用?為什么要用?
答:調(diào)用該訪問(wèn)返回一個(gè)以字符串指定類(lèi)名的類(lèi)的對(duì)象。答:jdo是java對(duì)象長(zhǎng)久化的新的標(biāo)準(zhǔn),為javadataobject的簡(jiǎn)稱(chēng),也是一個(gè)用于存取某種數(shù)據(jù)倉(cāng)庫(kù)中的對(duì)象的標(biāo)準(zhǔn)化api。jdo供應(yīng)了透亮的對(duì)象存儲(chǔ),因此對(duì)開(kāi)發(fā)人員來(lái)說(shuō),存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如jdbcapi的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到j(luò)do產(chǎn)品供應(yīng)商身上,使開(kāi)發(fā)人員解脫出來(lái),從而集中時(shí)間和精力在業(yè)務(wù)規(guī)律上。另外,jdo很敏捷,由于它可以在任何數(shù)據(jù)底層上運(yùn)行。jdbc只是面對(duì)關(guān)系數(shù)據(jù)庫(kù)(rdbms)jdo更通用,供應(yīng)到任何數(shù)據(jù)底層的存儲(chǔ)功能,比方關(guān)系數(shù)據(jù)庫(kù)、文件、xml以及對(duì)象數(shù)據(jù)庫(kù)(odbms)等等,使得應(yīng)用可移植性更強(qiáng)。89、說(shuō)出數(shù)據(jù)連接池的工作機(jī)制是什么?答:j2ee效勞器啟動(dòng)時(shí)會(huì)建立肯定數(shù)量的池連接,并始終維持不少于此數(shù)目的池連接??蛻?hù)端程序需要連接時(shí),池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙。假如當(dāng)前沒(méi)有空閑連接,池驅(qū)動(dòng)程序就新建肯定數(shù)量的連接,新建連接的數(shù)量有配置參數(shù)打算。當(dāng)使用的池連接調(diào)用完成后,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接。90、jdo是什么?答:jdo是java對(duì)象長(zhǎng)久化的新的標(biāo)準(zhǔn),為javadataobject的簡(jiǎn)稱(chēng),也是一個(gè)用于存取某種數(shù)據(jù)倉(cāng)庫(kù)中的對(duì)象的標(biāo)準(zhǔn)化api。jdo供應(yīng)了透亮的對(duì)象存儲(chǔ),因此對(duì)開(kāi)發(fā)人員來(lái)說(shuō),存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如jdbcapi的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到j(luò)do產(chǎn)品供應(yīng)商身上,使開(kāi)發(fā)人員解脫出來(lái),從而集中時(shí)間和精力在業(yè)務(wù)規(guī)律上。另外,jdo很敏捷,由于它可以在任何數(shù)據(jù)底層上運(yùn)行。jdbc只是面對(duì)關(guān)系數(shù)據(jù)庫(kù)(rdbms)jdo更通用,供應(yīng)到任何數(shù)據(jù)底層的存儲(chǔ)功能,比方關(guān)系數(shù)據(jù)庫(kù)、文件、xml以及對(duì)象數(shù)據(jù)庫(kù)(odbms)等等,使得應(yīng)用可移植性更強(qiáng)。
xml方面
91、xml有哪些解析技術(shù)?區(qū)分是什么?答:有dom,sax,stax等
dom:處理大型文件時(shí)其性能下降的特別厲害。這個(gè)問(wèn)題是由dom的樹(shù)構(gòu)造所造成的,這種構(gòu)造占用的內(nèi)存較多,而且dom必需在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)xml的隨機(jī)訪問(wèn)。
sax:不現(xiàn)于dom,sax是大事驅(qū)動(dòng)型的xml解析方式。它挨次讀取xml文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開(kāi)頭,文檔完畢,或者標(biāo)簽開(kāi)頭與標(biāo)簽完畢時(shí),它會(huì)觸發(fā)一個(gè)大事,用戶(hù)通過(guò)在其回調(diào)大事中寫(xiě)入處理代碼來(lái)處理xml文件,適合對(duì)xml的挨次訪問(wèn)stax:streamingapiforxml(stax)92、你在工程中用到了xml技術(shù)的哪些方面?如何實(shí)現(xiàn)的?
答:用到了數(shù)據(jù)存貯,信息配置兩方面。在做數(shù)據(jù)交換平臺(tái)時(shí),將不能數(shù)據(jù)源的數(shù)據(jù)組裝成xml文件,然后將xml文件壓縮打包加密后通過(guò)網(wǎng)絡(luò)傳送給接收者,接收解密與解壓縮后再同xml文件中復(fù)原相關(guān)信息進(jìn)展處理。在做軟件配置時(shí),利用xml可以很便利的進(jìn)展,軟件的各種配置參數(shù)都存貯在xml文件中。
93、xml文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)分?解析xml文檔有哪幾種方式?答:a:兩種形式dtdschema,b:本質(zhì)區(qū)分:schema本身是xml的,可以被xml解析器解析(這也是從dtd上進(jìn)展schema的根本目的),c:有dom,sax,stax等
dom:處理大型文件時(shí)其性能下降的特別厲害。這個(gè)問(wèn)題是由dom的樹(shù)構(gòu)造所造成的,這種構(gòu)造占用的內(nèi)存較多,而且dom必需在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)xml的隨機(jī)訪問(wèn)
sax:不現(xiàn)于dom,sax是大事驅(qū)動(dòng)型的xml解析方式。它挨次讀取xml文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開(kāi)頭,文檔完畢,或者標(biāo)簽開(kāi)頭與標(biāo)簽完畢時(shí),它會(huì)觸發(fā)一個(gè)大事,用戶(hù)通過(guò)在其回調(diào)大事中寫(xiě)入處理代碼來(lái)處理xml文件,適合對(duì)xml的挨次訪問(wèn)stax:streamingapiforxml(stax)
java線程學(xué)問(wèn)點(diǎn)總結(jié)java線程寫(xiě)法篇三
java線程總結(jié)
首先要理解線程首先需要了解一些根本的東西,我們現(xiàn)在所使用的大多數(shù)操作系統(tǒng)都屬于多任務(wù),分時(shí)操作系統(tǒng)。正是由于這種操作系統(tǒng)的消失才有了多線程這個(gè)概念。我們使用的windows,linux就屬于此列。什么是分時(shí)操作系統(tǒng)呢,通俗一點(diǎn)與就是可以同一時(shí)間執(zhí)行多個(gè)程序的操作系統(tǒng),在自己的電腦上面,你是不是一邊聽(tīng)歌,一邊談天還一邊看網(wǎng)頁(yè)呢?但實(shí)際上,并不上cpu在同時(shí)執(zhí)行這些程序,cpu只是將時(shí)間切割為時(shí)間片,然后將時(shí)間片安排給這些程序,獲得時(shí)間片的程序開(kāi)頭執(zhí)行,不等執(zhí)行完畢,下個(gè)程序又獲得時(shí)間片開(kāi)頭執(zhí)行,這樣多個(gè)程序輪番執(zhí)行一段時(shí)間,由于現(xiàn)在cpu的高速計(jì)算力量,給人的感覺(jué)就像是多個(gè)程序在同時(shí)執(zhí)行一樣。
一般可以在同一時(shí)間內(nèi)執(zhí)行多個(gè)程序的操作系統(tǒng)都有進(jìn)程的概念.一個(gè)進(jìn)程就是一個(gè)執(zhí)行中的程序,而每一個(gè)進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間,一組系統(tǒng)資源.在進(jìn)程概念中,每一個(gè)進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨(dú)立的.因此可以想像創(chuàng)立并執(zhí)行一個(gè)進(jìn)程的系統(tǒng)開(kāi)像是比擬大的,所以線程消失了。在java中,程序通過(guò)流掌握來(lái)執(zhí)行程序流,程序中單個(gè)挨次的流掌握稱(chēng)為線程,多線程則指的是在單個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù).多線程意味著一個(gè)程序的多行語(yǔ)句可以看上去幾乎在同一時(shí)間內(nèi)同時(shí)運(yùn)行.(你可以將前面一句話的程序換成進(jìn)程,進(jìn)程是程序的一次執(zhí)行過(guò)程,是系統(tǒng)運(yùn)行程序的根本單位)
線程與進(jìn)程相像,是一段完成某個(gè)特定功能的代碼,是程序中單個(gè)挨次的流掌握;但與進(jìn)程不同的是,同類(lèi)的多個(gè)線程是共享一塊內(nèi)存空間和一組系統(tǒng)資源,而線程本身的數(shù)據(jù)通常只有微處理器的存放器數(shù)據(jù),以及一個(gè)供程序執(zhí)行時(shí)使用的堆棧.所以系統(tǒng)在產(chǎn)生一個(gè)線程,或者在各個(gè)線程之間切換時(shí),負(fù)擔(dān)要比進(jìn)程小的多,正因如此,線程也被稱(chēng)為輕負(fù)荷進(jìn)程(light-weightprocess).一個(gè)進(jìn)程中可以包含多個(gè)線程.多任務(wù)是指在一個(gè)系統(tǒng)中可以同時(shí)運(yùn)行多個(gè)程序,即有多個(gè)獨(dú)立運(yùn)行的任務(wù),每個(gè)任務(wù)對(duì)應(yīng)一個(gè)進(jìn)程,同進(jìn)程一樣,一個(gè)線程也有從創(chuàng)立,運(yùn)行到消亡的過(guò)程,稱(chēng)為線程的生命周期.用線程的狀態(tài)(state)說(shuō)明線程處在生命周期的哪個(gè)階段.線程有創(chuàng)立,可運(yùn)行,運(yùn)行中,堵塞,死亡五中狀態(tài).通過(guò)線程的掌握與調(diào)度可使線程在這幾種狀態(tài)間轉(zhuǎn)化每個(gè)程序至少自動(dòng)擁有一個(gè)線程,稱(chēng)為主線程.當(dāng)程序加載到內(nèi)存時(shí),啟動(dòng)主線程.[線程的運(yùn)行機(jī)制以及調(diào)度模型]
java中多線程就是一個(gè)類(lèi)或一個(gè)程序執(zhí)行或治理多個(gè)線程執(zhí)行任務(wù)的力量,每個(gè)線程可以獨(dú)立于其他線程而獨(dú)立運(yùn)行,固然也可以和其他線程協(xié)同運(yùn)行,一個(gè)類(lèi)掌握著它的全部線程,可以打算哪個(gè)線程得到優(yōu)先級(jí),哪個(gè)線程可以訪問(wèn)其他類(lèi)的資源,哪個(gè)線程開(kāi)頭執(zhí)行,哪個(gè)保持休眠狀態(tài)。下面是線程的機(jī)制圖:
page1of16
線程的狀態(tài)表示線程正在進(jìn)展的活動(dòng)以及在此時(shí)間段內(nèi)所能完成的任務(wù).線程有創(chuàng)立,可運(yùn)行,運(yùn)行中,堵塞,死亡五中狀態(tài).一個(gè)具有生命的線程,總是處于這五種狀態(tài)之一:1.創(chuàng)立狀態(tài)
使用new運(yùn)算符創(chuàng)立一個(gè)線程后,該線程僅僅是一個(gè)空對(duì)象,系統(tǒng)沒(méi)有安排資源,稱(chēng)該線程處于創(chuàng)立狀態(tài)(newthread)2.可運(yùn)行狀態(tài)
使用start()方法啟動(dòng)一個(gè)線程后,系統(tǒng)為該線程安排了除cpu外的所需資源,使該線程處于可運(yùn)行狀態(tài)(runnable)3.運(yùn)行中狀態(tài)
java運(yùn)行系統(tǒng)通過(guò)調(diào)度選中一個(gè)runnable的線程,使其占有cpu并轉(zhuǎn)為運(yùn)行中狀態(tài)(running).此時(shí),系統(tǒng)真正執(zhí)行線程的run()方法.4.堵塞狀態(tài)
一個(gè)正在運(yùn)行的線程因某種緣由不能連續(xù)運(yùn)行時(shí),進(jìn)入堵塞狀態(tài)(blocked)5.死亡狀態(tài)
線程完畢后是死亡狀態(tài)(dead)
同一時(shí)刻假如有多個(gè)線程處于可運(yùn)行狀態(tài),則他們需要排隊(duì)等待cpu資源.此時(shí)每個(gè)線程自動(dòng)獲得一個(gè)線程的優(yōu)先級(jí)(priority),優(yōu)先級(jí)的凹凸反映線程的重要或緊急程度.可運(yùn)行狀態(tài)的線程按優(yōu)先級(jí)排隊(duì),線程調(diào)度依據(jù)優(yōu)先級(jí)根底上的“先到先效勞”原則.線程調(diào)度治理器負(fù)責(zé)線程排隊(duì)和cpu在線程間的安排,并由線程調(diào)度算法進(jìn)展調(diào)度.當(dāng)線程調(diào)度治理器選種某個(gè)線程時(shí),該線程獲得cpu資源而進(jìn)入運(yùn)行狀態(tài).線程調(diào)度是先占式調(diào)度,即假如在當(dāng)前線程執(zhí)行過(guò)程中一個(gè)更高優(yōu)先級(jí)的線程進(jìn)入可運(yùn)行狀態(tài),則這個(gè)線程馬上被調(diào)度執(zhí)行.先占式調(diào)度分為:獨(dú)占式和分時(shí)方式.獨(dú)占方式下,當(dāng)前執(zhí)行線程將始終執(zhí)行下去,直到執(zhí)行完畢或由于某種緣由主動(dòng)放棄cpu,或cpu被一個(gè)更高優(yōu)先級(jí)的線程搶占
分時(shí)方式下,當(dāng)前運(yùn)行線程獲得一個(gè)時(shí)間片,時(shí)間到時(shí),即使沒(méi)有執(zhí)行完也要讓出
page2of16
cpu,進(jìn)入可運(yùn)行狀態(tài),等待下一個(gè)時(shí)間片的調(diào)度.系統(tǒng)選中其他可運(yùn)行狀態(tài)的線程執(zhí)行
分時(shí)方式的系統(tǒng)使每個(gè)線程工作若干步,實(shí)現(xiàn)多線程同時(shí)運(yùn)行
另外請(qǐng)留意下面的線程調(diào)度規(guī)章(假如有不理解,不急,往下看):①假如兩個(gè)或是兩個(gè)以上的線程都修改一個(gè)對(duì)象,那么把執(zhí)行修改的方法定義為被同步的(synchronized),假如對(duì)象更新影響到只讀方法,那么只度方法也應(yīng)當(dāng)定義為同步的
②假如一個(gè)線程必需等待一個(gè)對(duì)象狀態(tài)發(fā)生變化,那么它應(yīng)當(dāng)在對(duì)象內(nèi)部等待,而不是在外部等待,它可以調(diào)用一個(gè)被同步的方法,并讓這個(gè)方法調(diào)用wait()③每當(dāng)一個(gè)方法轉(zhuǎn)變某個(gè)對(duì)象的狀態(tài)的時(shí)候,它應(yīng)當(dāng)調(diào)用notifyall()方法,這給等待隊(duì)列的線程供應(yīng)時(shí)機(jī)來(lái)看一看執(zhí)行環(huán)境是否已發(fā)生轉(zhuǎn)變
④記住wait(),notify(),notifyall()方法屬于object類(lèi),而不是thread類(lèi),認(rèn)真檢查看是否每次執(zhí)行wait()方法都有相應(yīng)的notify()或notifyall()方法,且它們作用與一樣的對(duì)象在java中每個(gè)類(lèi)都有一個(gè)主線程,要執(zhí)行一個(gè)程序,那么這個(gè)類(lèi)當(dāng)中肯定要有main方法,這個(gè)man方法也就是javaclass中的主線程。你可以自己創(chuàng)立線程,有兩種方法,一是繼承thread類(lèi),或是實(shí)現(xiàn)runnable接口。一般狀況下,最好避開(kāi)繼承,由于java中是單根繼承,假如你選用繼承,那么你的類(lèi)就失去了彈性,固然也不能全然否認(rèn)繼承thread,該方法編寫(xiě)簡(jiǎn)潔,可以直接操作線程,適用于單重繼承狀況。至于選用那一種,詳細(xì)狀況詳細(xì)分析。
eg.繼承thread
publicclassmythread_1extendsthread{publicvoidrun(){//somecode}}
eg.實(shí)現(xiàn)runnable接口
publicclassmythread_2implementsrunnable{publicvoidrun(){//somecode}}
page3of16
當(dāng)使用繼承創(chuàng)立線程,這樣啟動(dòng)線程:
newmythread_1().start()
當(dāng)使用實(shí)現(xiàn)接口創(chuàng)立線程,這樣啟動(dòng)線程:
newthread(newmythread_2()).start()
留意,其實(shí)是創(chuàng)立一個(gè)線程實(shí)例,并以實(shí)現(xiàn)了runnable接口的類(lèi)為參數(shù)傳入這個(gè)實(shí)例,當(dāng)執(zhí)行這個(gè)線程的時(shí)候,mythread_2中run里面的代碼將被執(zhí)行。下面是完成的例子:
publicclassmythreadimplementsrunnable{publicvoidrun(){n(“mynameis”+tthread().getname());}publicstaticvoidmain(string[]args){newthread(newmythread()).start();}}
執(zhí)行后將打印出:mynameisthread-0
你也可以創(chuàng)立多個(gè)線程,像下面這樣
newthread(newmythread()).start();newthread(newmythread()).start();newthread(newmythread()).start();
那么會(huì)打印出:
mynameisthread-0mynameisthread-1
page4of16
mynameisthread-2
看了上面的結(jié)果,你可能會(huì)認(rèn)為線程的執(zhí)行挨次是依次執(zhí)行的,但是那只是一般狀況,千萬(wàn)不要用以為是線程的執(zhí)行機(jī)制;影響線程執(zhí)行挨次的因素有幾點(diǎn):首先看看前面提到的優(yōu)先級(jí)別
publicclassmythreadimplementsrunnable{publicvoidrun(){n(“mynameis”+tthread().getname());}publicstaticvoidmain(string[]args){threadt1=newthread(newmythread());threadt2=newthread(newmythread());threadt3=newthread(newmythread());
ority(_priority);//給予最高優(yōu)先級(jí)
();();();}}
再看看結(jié)果:
mynameisthread-1mynameisthread-0mynameisthread-2
page5of16
線程的優(yōu)先級(jí)分為10級(jí),分別用1到10的整數(shù)代表,默認(rèn)狀況是5。上面的ority(_priority)ority(10)
然后是線程程序本身的設(shè)計(jì),比方使用sleep,yield,join,wait等方法(詳情請(qǐng)看jdkdocument)
publicclassmythreadimplementsrunnable{publicvoidrun(){
try{
intsleeptime=(int)(()*100);//產(chǎn)生隨機(jī)數(shù)字,tthread().sleep(sleeptime);//讓其休眠肯定時(shí)間,時(shí)間又上面sleeptime打算
//publicstaticvoidsleep(longmillis)throwinterruptedexception
//(api)
n(tthread().getname()+“睡了”
+sleeptime);
}catch(interruptedexceptionie)
//由于線程在休眠可能被中斷,所以調(diào)用sleep方法的時(shí)候需要捕獲特別
page6of16
{
tacktrace();
}}
publicstaticvoidmain(string[]args){
threadt1=newthread(newmythread());
threadt2=newthread(newmythread());
threadt3=newthread(newmythread());
();
();
();}}
執(zhí)行后觀看其輸出:thread-0睡了11thread-2睡了48thread-1睡了69
上面的執(zhí)行結(jié)果是隨機(jī)的,再執(zhí)行很可能消失不同的結(jié)果。由于上面我在run中添加了休眠語(yǔ)句,當(dāng)線程休眠的時(shí)候就會(huì)讓出cpu,cpu將會(huì)選擇執(zhí)行處于runnable狀態(tài)中的其他線程,固然也可能消失這種狀況,休眠的thread馬上進(jìn)入了runnable狀態(tài),cpu再次執(zhí)行它。[線程組概念]線程是可以被組織的,java中存在線程組的概念,每個(gè)線程都是一個(gè)線程組的成員,線程組把多個(gè)線程集成為一個(gè)對(duì)象,通過(guò)線程組可以同時(shí)對(duì)其中的多個(gè)線程進(jìn)展操作,包中的thread——group類(lèi)用來(lái)治理一組線程,包括:線程的數(shù)目,線程間的關(guān)系,線程正在執(zhí)行的操作,以及線程將要啟動(dòng)或終止時(shí)間等.線程組還可以包含線程組.在java的應(yīng)用程序中,最高層的線程組是名位main的線程組,在main中還可以參加線程或
page7of16
線程組,在mian的子線程組中也可以參加線程和線程組,形成線程組和線程之間的樹(shù)狀繼承關(guān)系。像上面創(chuàng)立的線程都是屬于main這個(gè)線程組的。借用上面的例子,main里面可以這樣寫(xiě):
publicstaticvoidmain(string[]args){
/***************************************
*threadgroup(stringname)threadgroup(threadgroupparent,stringname)
***********************************/
threadgroupgroup1=newthreadgroup(“group1”);
threadgroupgroup2=newthreadgroup(group1,“group2”);
threadt1=newthread(group2,newmythread());
threadt2=newthread(group2,newmythread());
threadt3=newthread(group2,newmythread());
();
();
();}線程組的嵌套,t1,t2,t3被參加group2,group2參加group1。
page8of16
另外一個(gè)比擬多就是關(guān)于線程同步方面的,試想這樣一種狀況,你有一筆存款在銀行,你在一家銀行為你的賬戶(hù)存款,而你的妻子在另一家銀行從這個(gè)賬戶(hù)提款,現(xiàn)在你有1000塊在你的賬戶(hù)里面。你存入了1000,但是由于另一方也在對(duì)這筆存款進(jìn)展操作,人家開(kāi)頭執(zhí)行的時(shí)候只看到賬戶(hù)里面原來(lái)的1000元,當(dāng)你的妻子提款1000元后,你妻子所在的銀行就認(rèn)為你的賬戶(hù)里面沒(méi)有錢(qián)了,而你所在的銀行卻認(rèn)為你還有2023元。看看下面的例子:
classblanksaving//儲(chǔ)蓄賬戶(hù){privatestaticintmoney=10000;
publicvoidadd(inti){
money=money+i;
n(“husband向銀行存入了[¥”+i+“]”);}
publicvoidget(inti){
money=money-i;
n(“wife向銀行取走了[¥”+i+“]”);
if(money0)
n(“余額缺乏!”);}
page9of16
publicintshowmoney(){
returnmoney;}}
classoperaterimplementsrunnable{stringname;blanksavingbs;
publicoperater(blanksavingb,strings){
name=s;
bs=b;
}
publicstaticvoidoper(stringname,blanksavingbs){
if((“husband”)){
try{
for(inti=0;i10;i++){
page10of16
tthread().sleep((int)(()*300));
(1000);
}
}catch(interruptedexceptione){
}
}else{
try{
for(inti=0;i10;i++){
tthread().sleep((int)(()*300));
(1000);
}
}catch(interruptedexceptione){
}
}}
publicvoidrun(){
oper(name,bs);}
page11of16
}
publicclassbanktest{publicstaticvoidmain(string[]args)throwsinterruptedexception{
blanksavingbs=newblanksaving();
operatero1=newoperater(bs,“husband”);
operatero2=newoperater(bs,“wife”);
threadt1=newthread(o1);
threadt2=newthread(o2);
();
();
tthread().sleep(500);}}
下面是其中一次的執(zhí)行結(jié)果:
firsthusband向銀行存入了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]husband向銀行存入了[¥1000]wife向銀行取走了[¥1000]husband向銀行存入了[¥1000]wife向銀行取走了[¥1000]husband向銀行存入了[¥1000]wife向銀行取走了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]
page12of16
wife向銀行取走了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]husband向銀行存入了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]husband向銀行存入了[¥1000]
看到了嗎,這可不是正確的需求,在husband還沒(méi)有完畢操作的時(shí)候,wife就插了進(jìn)來(lái),這樣很可能導(dǎo)致意外的結(jié)果。解決方法很簡(jiǎn)潔,就是將對(duì)數(shù)據(jù)進(jìn)展操作方法聲明為synchronized,當(dāng)方法被該關(guān)鍵字聲明后,也就意味著,假如這個(gè)數(shù)據(jù)被加鎖,只有一個(gè)對(duì)象得到這個(gè)數(shù)據(jù)的鎖的時(shí)候該對(duì)象才能對(duì)這個(gè)數(shù)據(jù)進(jìn)展操作。也就是當(dāng)你存款的時(shí)候,這筆賬戶(hù)在其他地方是不能進(jìn)展操作的,只有你存款完畢,銀行治理人員將賬戶(hù)解鎖,其他人才能對(duì)這個(gè)賬戶(hù)進(jìn)展操作。
修改publicstaticvoidoper(stringname,blanksavingbs)為publicstaticvoidoper(stringname,blanksavingbs),再看看結(jié)果:
husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]husband向銀行存入了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]wife向銀行取走了[¥1000]
當(dāng)丈夫完成操作后,妻子才開(kāi)頭執(zhí)行操作,這樣的話,對(duì)共享對(duì)象的操作就不會(huì)有問(wèn)題了。
[waitandnotify]你可以利用這兩個(gè)方法很好的掌握線程的執(zhí)行流程,當(dāng)線程調(diào)用wait方法后,線
page13of16
程將被掛起,直到被另一線程喚醒(notify)或則是假如wait方法指定有時(shí)間得話,在沒(méi)有被喚醒的狀況下,指定時(shí)間時(shí)間過(guò)后也將自動(dòng)被喚醒。但是要留意肯定,被喚醒并不是指立刻執(zhí)行,而是從組塞狀態(tài)變?yōu)榭蛇\(yùn)行狀態(tài),其是否運(yùn)行還要看cpu的調(diào)度。事例代碼:
classmythread_1extendsthread{
objectlock;
publicmythread_1(objecto){
lock=o;}
publicvoidrun(){
try{
synchronized(lock){
n(“enterthread_1andwait”);
();
n(“benotified”);
}
}catch(interruptedexceptione){
}}
page14of16
}
classmythread_2extendsthread{objectlock;
publicmythread_2(objecto){
lock=o;}
publicvoidrun(){
synchronized(lock){
n(“enterthread_2andnotify”);
();
}}}
publicclassmythread{publicstaticvoidmain(string[]args){
int[]in=newint[0];//notice
mythread_1t1=newmythread_1(in);
page15of16
mythread_2t2=newmythread_2(in);
();
();}}
執(zhí)行結(jié)果如下:
enterthread_1andwaitenterthread_2andnotifythread_1benotified
可能你留意到了在使用waitandnotify方法得時(shí)候我使用了synchronized塊來(lái)包裝這兩個(gè)方法,這是由于調(diào)用這兩個(gè)方法的時(shí)候線程必需獲得鎖,也就是上面代碼中的lock[],假如你不用synchronized包裝這兩個(gè)方法的得話,又或則鎖不一是同一把,比方在mythread_2中synchronized(lock)改為synchronized(this),lmonitorstateexception執(zhí)行期特別。另外waitandnotify方法是object中的,并不在thread這個(gè)類(lèi)中。最終你可能留意到了這點(diǎn):int[]in=newint[0];為什么不是創(chuàng)立newobject而是一個(gè)0長(zhǎng)度的數(shù)組,那是由于在java中創(chuàng)立一個(gè)0長(zhǎng)度的數(shù)組來(lái)充當(dāng)鎖更加高效。
page16of16
java線程學(xué)問(wèn)點(diǎn)總結(jié)java線程寫(xiě)法篇四
1.什么是gui?
a)gui是graphicsuserinterface的全稱(chēng),意思是圖形用戶(hù)界面.2.為什么需要gui?
a)圖形用戶(hù)界面能夠讓最終用戶(hù)通過(guò)鼠標(biāo)拖動(dòng)、單擊等動(dòng)作就可以操作整個(gè)應(yīng)用,從而提高應(yīng)用的用戶(hù)體驗(yàn)效果,
a)awt是sun公司供應(yīng)的一個(gè)根本的gui類(lèi)庫(kù),被稱(chēng)為抽象工具集(abstract
window-toolkit),它為java應(yīng)用程序供應(yīng)了根本的組件.b)awt組件需要調(diào)用運(yùn)行平臺(tái)的圖形界面來(lái)創(chuàng)立和平臺(tái)全都的對(duì)等體,所以awt只
能使用全部平臺(tái)都支持的公共組件,因此awt只能夠供應(yīng)一些的主要組成局部
a)component,代表一個(gè)詳細(xì)圖形表示力量的對(duì)象,可以在屏幕上顯示,并與用戶(hù)交互.通常我們把它稱(chēng)為”組件”.b)menucomponent,r,,em,代表一個(gè)菜單項(xiàng).c)container,代表一個(gè)awt組件容器,可以盛裝其他commponent組件,它繼承自
component抽象類(lèi),,,,代表一個(gè)對(duì)話框
a)filedialog代表一個(gè)文件對(duì)話框,,可容納其他組件,但不能獨(dú)立存在,必需被添加到其他容器中.ii.scrollpane,帶滾動(dòng)條的容器.d)layoutmanager,布局治理器,yout,流式布局,layout,邊框布局,只能盛裝5個(gè)組件,yout,網(wǎng)格布局,glayout,網(wǎng)格包布局,一種較為簡(jiǎn)單的布局治理器,yout,卡片布局,以時(shí)間來(lái)治理容器內(nèi)的組件,將組件看作是一張張卡片,每次顯示最外面一張卡片(組件).boxlayou,箱式布局,的大事
a)應(yīng)用程序響應(yīng)用戶(hù)的某個(gè)動(dòng)作或懇求,如用戶(hù)單擊了一下鼠標(biāo),用戶(hù)懇求關(guān)閉應(yīng)用
程序窗口等.b)awt編程中,全部大事的處理都必需交給特定的對(duì)象來(lái)完成,我們將這個(gè)特定的對(duì)
象稱(chēng)為大事監(jiān)聽(tīng)器.c)awt的大事處理機(jī)制是一種委派式的大事處理方式,通過(guò)將某個(gè)大事監(jiān)聽(tīng)器注冊(cè)
到用戶(hù)指定的組件,當(dāng)用戶(hù)進(jìn)展某個(gè)操作并觸發(fā)指定大事時(shí),應(yīng)用程序會(huì)自動(dòng)產(chǎn)生一個(gè)大事(event)對(duì)象并作為參數(shù)傳給大事監(jiān)聽(tīng)器中的大事處理器,然后由大事監(jiān)
聽(tīng)器通知大事處理器來(lái)響應(yīng)用戶(hù),完成用戶(hù)的懇求.d)不同的大事需要不同的大事監(jiān)聽(tīng)器,不同的監(jiān)聽(tīng)器需要實(shí)現(xiàn)不同的監(jiān)聽(tīng)器接口.e)大事監(jiān)聽(tīng)器接口:為某個(gè)特定大事定義了響應(yīng)用戶(hù)懇求的方法,當(dāng)用戶(hù)將某個(gè)大事
監(jiān)聽(tīng)器注冊(cè)到指定組件上以響應(yīng)特定的大事時(shí),則該大事監(jiān)聽(tīng)器必需實(shí)現(xiàn)對(duì)應(yīng)的大事監(jiān)聽(tīng)器接口才能對(duì)用戶(hù)的懇求進(jìn)展有效處理.例如,用戶(hù)點(diǎn)擊了鼠標(biāo)右鍵,盼望翻開(kāi)某個(gè)應(yīng)用程序的右鍵菜單,則注冊(cè)到該應(yīng)用程序上的大事監(jiān)聽(tīng)器必需實(shí)現(xiàn)鼠標(biāo)大事監(jiān)聽(tīng)器接口,并實(shí)現(xiàn)該接口內(nèi)部某些方法來(lái)完成用戶(hù)的懇求.f)大事適配器,許多時(shí)候,我們只需要實(shí)現(xiàn)某個(gè)大事監(jiān)聽(tīng)器接口中個(gè)別方法就能完成應(yīng)用程序的實(shí)際需求,但實(shí)現(xiàn)該大事監(jiān)聽(tīng)器接口的類(lèi)必需實(shí)現(xiàn)該接口中全部的抽象方法,這會(huì)造成代碼的冗余.而大事適配器可以幫我們解決這個(gè)問(wèn)題,大事適配器實(shí)現(xiàn)了全部的擁有多個(gè)抽象方法的大事監(jiān)聽(tīng)器接口,并空實(shí)現(xiàn)了這些接口中全部的抽象方法,所謂空實(shí)現(xiàn),就是方法中沒(méi)有任何實(shí)現(xiàn)代碼,因此,我們可以通過(guò)繼承對(duì)應(yīng)大事監(jiān)聽(tīng)器接口的大事適配器抽象類(lèi),并實(shí)現(xiàn)我們感興趣的方法來(lái)完成應(yīng)用需求即可.g)java大事處理過(guò)程中主要涉及的三類(lèi)對(duì)象
i.大事源,.大事,通常指用戶(hù)的某個(gè)操作,如單擊了一下鼠標(biāo),.大事監(jiān)聽(tīng)器,負(fù)責(zé)監(jiān)聽(tīng)大事源上所發(fā)生的大事,并作出響應(yīng).h)awt大事監(jiān)聽(tīng)器的實(shí)現(xiàn)形式
.內(nèi)部類(lèi)形式頂級(jí)類(lèi)形式
iii.類(lèi)本身作為大事監(jiān)聽(tīng)器
iv.匿名內(nèi)部類(lèi)形式
v.注:繪圖
a)awt繪圖的實(shí)現(xiàn)過(guò)程.i.重寫(xiě)畫(huà)布類(lèi)的paint方法,.調(diào)用component類(lèi)的repaint方法繪制圖形.b)awt實(shí)現(xiàn)繪圖主要涉及的對(duì)象
.c)component類(lèi)的子類(lèi)canvas類(lèi),cs,代表一個(gè)畫(huà)筆,類(lèi)代表了位圖,它的一個(gè)主要的實(shí)現(xiàn)類(lèi)bufferedimage是可以訪問(wèn)圖形數(shù)據(jù)
緩沖區(qū),并可以返回一個(gè)graphics對(duì)象來(lái)繪制該buuferedimage.d)的優(yōu)缺點(diǎn)
a)awt在很多非桌面環(huán)境,如嵌入式設(shè)備中有著自己的優(yōu)勢(shì),它的主要優(yōu)點(diǎn)如下:.iv.更少的內(nèi)存:對(duì)運(yùn)行在有限環(huán)境中的gui程序的開(kāi)發(fā),是適宜的。2.更少的啟動(dòng)大事:由于awt組件是本地由操作系統(tǒng)實(shí)現(xiàn)的。絕大多數(shù)的二進(jìn)制代碼已經(jīng)在如系統(tǒng)啟動(dòng)的時(shí)候被預(yù)裝載了,這降低了它的啟動(dòng)大事。3.更好的響應(yīng):由于本地組件由操作系統(tǒng)渲染。4.成熟穩(wěn)定的:能夠正常工作并很少使你的程序崩潰。
b)同樣它也有不少的缺點(diǎn)
.更少組件類(lèi)型:表和樹(shù)這些重要的組件缺失了。它們是桌面應(yīng)用程序中普遍使用的。2.缺乏豐富的組件特征:按鈕不支持圖片。3.無(wú)擴(kuò)展性:awt的組件是本地組件。jvm中的awt類(lèi)實(shí)例實(shí)際只是包含本地
組件的引用。唯一的擴(kuò)展點(diǎn)是awt的canvas組件,可以從零開(kāi)頭創(chuàng)立自定義組
件。然而無(wú)法繼承和重用一個(gè)已有的awt組件
總結(jié):awt是sun不推舉使用的工具集,實(shí)際開(kāi)發(fā)中很少使用awt而是使用sun公司
和netscape公司共同開(kāi)發(fā)的一個(gè)新的用戶(hù)界面庫(kù)-swing來(lái)開(kāi)發(fā)gui應(yīng)用程序,awt是圖形用戶(hù)界面編程的根底,它的布局治理、大事機(jī)制、剪貼板操作等內(nèi)容仍舊適用于swinggui編程.
java線程學(xué)問(wèn)點(diǎn)總結(jié)java線程寫(xiě)法篇五
inthefollowingcode,whichistheearlieststatement,wheretheobjectoriginallyheldine,maybegarbagecollected:
classtest{
staticvoidmain(stringargs[]){
eee=newemployee(“bob”,48);
atepay();
n(etails());
6.e=null;
7.e=newemployee(“denise”,36);
atepay();
n(etails());
10.}
11.}
onlyone:
inthefollowingcode,whichistheearlieststatement,wheretheobjectoriginallyheldine,maybegarbagecollected:
classtest{
staticvoidmain(stringargs[]){
eee=newemployee(“bob”,48);
atepay();
n(etails());
6.e=null;
7.e=newemployee(“denise”,36);
atepay();
n(etails());
10.}
11.}
onlyone:
10
11
7
8
2:exhibit:
classtest(estaticintj=0;
estaticbooleanmethodb(intk)(5.j+=k;
true;
6.)
staticvoidmethoda(inti){
nb:
10.b=i10|methodb(4);
11.b=i10||methodb(8);
12.)
staticvoidmain(stringargs[]}(a(0);
n(j);
17.)
18.)
whatistheresult?
programprints“0”
programprints“4”
programprints“8”
programprints“12”
3:whatiswrittentothestandardoutputgiventhefollowingstatement:n(4|7);
selecttherightanswer:
a.4
b.5
c.6
d.7
4:
selectvalididentifierofjava:
selectvalididentifierofjava:
a.%passwd
b.3d_game
c.$charge
5:設(shè)有變量說(shuō)明語(yǔ)句inta=1,b=0;
則執(zhí)行以下程序段的輸出結(jié)果為()。
switch(a)
{
case1:
switch(b)
{
case0:printf(“**0**”);break;
case1:printf(“**1**”);break;
}
case2:printf(“**2**”);break;
}
printf(“”);
a.**0**
b.**0****2**
c.**0****1****2**
d.有語(yǔ)法錯(cuò)誤
6:inthefollowingpiecesofcode,whichonewillcompilewithoutanyerror?
buffersb1=“abcd”;
nb=newboolean(“abcd”);
c.c:byteb=255;
fl=1.2;
7:
whatistheresultwhenyoucompileandrunthefollowingcode?
publicclassthrowsdemo
{
staticvoidthrowmethod()
{
n(“insidethrowmethod.”);
thrownewillegalaccessexception(“demo”);
}
publicstaticvoidmain(stringargs[])
{
try
{
throwmethod();
}
catch(illegalaccessexceptione)
{
n(“caught”+e);
}
}
}
choices:
whatistheresultwhenyoucompileandrunthefollowingcode?
publicclassthrowsdemo
{
staticvoidthrowmethod()
{
n(“insidethrowmethod.”);
thrownewillegalaccessexception(“demo”);
}
publicstaticvoidmain(stringargs[])
{
try
{
throwmethod();
}
catch(illegalaccessexceptione)
{
n(“caught”+e);
}
}
}
choices:
ationerror
eerror
esuccessfully,nothingisedbycaught:laccessexcption:demo
8:whichofthefollowingstatementsarenotlegal?
l=4990;
i=4l;
d=34.4;
t=0.9f.9:
givethefollowingjavaclass:
publicclassexample{
publicstaticvoidmain(stringargs[]){
staticintx[]=newint[15];
n(x[5]);
}
}
whichstatementiscorrected?
givethefollowingjavaclass:
publicclassexample{
publicstaticvoidmain(stringargs[]){
staticintx[]=newint[15];
n(x[5]);
}
}
whichstatementiscorrected?
compile,someerrorwillrun,someerrorwillisisnull.10:下面關(guān)于變量及其范圍的陳述哪些是錯(cuò)的。
a.實(shí)例變量是類(lèi)的成員變量。
b.實(shí)例變量用關(guān)鍵字static聲明。
c.在方法中定義的局部變量在該方法被執(zhí)行時(shí)創(chuàng)立
d.局部變量在使用前必需被初始化。
11:
publicclassx{
publicobjectm(){
objecto=newfloat(3.14f);//line3
object[]oa=newobject[1];//line4
oa[0]=o;//line5
o=null;//line6
returnoa[0];//line7
}
}
whenisthefloatobject,createdinline3,eligibleforgarbagecollection?
publicclassx{
publicobjectm(){
objecto=newfloat(3.14f);//line3
object[]oa=newobject[1];//line4
oa[0]=o;//line5
o=null;//line6
returnoa[0];//line7
}
}
whenisthefloatobject,createdinline3,eligibleforgarbagecollection?
afterlineafterline6
afterline7(thatis,asthemethodreturns)
inthismethod
12:
whichisthemostappropriatecodesnippetthatcanbeinsertedatline18inthefollowingcode?
(assumethatthecodeiscompiledandrunwithassertionsenabled)
.*;
classasserttest
4.{
ehashmapcctld;
asserttest()
8.{
=newhashmap();
(“in”,“india”);
(“uk”,“unitedkingdom”);
(“au”,“australia”);
13.//morecode...14.}
15.//othermethodsstringgetcountry(stringcountrycode)
17.{
18.//whatshouldbeinsertedhere?
country=(string)(countrycode);
country;
21.}
22.}
whichisthemostappropriatecodesnippetthatcanbeinsertedatline18inthefollo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年規(guī)范化設(shè)備采購(gòu)協(xié)議范例
- 2024年設(shè)備維護(hù)保養(yǎng)服務(wù)協(xié)議
- 2024年基站場(chǎng)地租賃協(xié)議模板
- 店鋪出租協(xié)議文本 2024 年
- 2024泵車(chē)租賃協(xié)議定制集錦
- 2024年商業(yè)街店鋪?zhàn)赓U協(xié)議
- 2024年專(zhuān)業(yè)委托信用擔(dān)保服務(wù)協(xié)議
- 2024年規(guī)范化小型物流服務(wù)協(xié)議
- 2024年定制反擔(dān)保保障協(xié)議
- 2024年度房產(chǎn)指標(biāo)交易協(xié)議模板
- 護(hù)士注冊(cè)健康體檢表下載【可直接打印版本】
- 層次分析法課件
- 云南民族歷史文化課件
- 超聲引導(dǎo)下臂叢神經(jīng)阻滯 課件
- 優(yōu)秀員工榮譽(yù)證書(shū)模板
- 市場(chǎng)營(yíng)銷(xiāo)英語(yǔ) 全冊(cè)課件
- 幼兒教育政策法規(guī)解讀-高職-學(xué)前教育專(zhuān)業(yè)課件
- 傷口拍照要求及換藥技術(shù)-課件
- 產(chǎn)品留樣觀察記錄
- 新外研版八年級(jí)下冊(cè)英語(yǔ) Module 6 Unit 1 教案(教學(xué)設(shè)計(jì))
- 《采用合理的論證方法》課件-統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
評(píng)論
0/150
提交評(píng)論