新聞中心
java中如何用continue跳過while循環(huán)中的某一值繼續(xù)其他步驟
當(dāng)while(條件)里面的條件為true時,就會執(zhí)行while大括號內(nèi)的代碼,里面有什么就會執(zhí)行
成都創(chuàng)新互聯(lián)是專業(yè)的海滄網(wǎng)站建設(shè)公司,海滄接單;提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行海滄網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
如果里面有continue的話,會跳過本次循環(huán)
也就是說,continue后的代碼這次循環(huán)不執(zhí)行了,開始執(zhí)行下次循環(huán)
參考代碼:
int i = 0;
while(true) {
i++;
if (i=10) {
break; //表示當(dāng)i=10的時候,就跳出循環(huán),執(zhí)行while后面的代碼
}
if(i%2==0) {
continue; //表示當(dāng)i能整除2的時候,就跳過本循環(huán),不執(zhí)行while中后面的語句,而是執(zhí)行 下一輪循環(huán)。比如當(dāng)i=2時,就continue,即是不再執(zhí)行System.out.println(i);而是執(zhí)行上面的i++
}
System.out.println(i);
}
java代碼被跳過不執(zhí)行什么原因
補充:至于不在異常塊里,可能你的catch里沒有匹配的異常類;
System.out.println("從數(shù)據(jù)庫中讀出userJSON"+j.toString());//不執(zhí)行
這句里出現(xiàn)異常,有可能j的引用不存在,為null,你可以這樣調(diào)試下:
try {
System.out.println("從數(shù)據(jù)庫中讀出userJSON"+j.toString());//不執(zhí)行
} catch (Exception e){
System.out.println(e.getMessage);
}
java多線程問題 跳過run方法里面的if執(zhí)行?
多線程
35. 并行和并發(fā)有什么區(qū)別?
并行是指兩個或者多個事件在同一時刻發(fā)生;而并發(fā)是指兩個或多個事件在同一時間間隔發(fā)生。
并行是在不同實體上的多個事件,并發(fā)是在同一實體上的多個事件。
在一臺處理器上“同時”處理多個任務(wù),在多臺處理器上同時處理多個任務(wù)。如hadoop分布式集群。
所以并發(fā)編程的目標(biāo)是充分的利用處理器的每一個核,以達(dá)到最高的處理性能。
36. 線程和進(jìn)程的區(qū)別?
簡而言之,進(jìn)程是程序運行和資源分配的基本單位,一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程。進(jìn)程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存資源,減少切換次數(shù),從而效率更高。線程是進(jìn)程的一個實體,是cpu調(diào)度和分派的基本單位,是比程序更小的能獨立運行的基本單位。同一進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行。
37. 守護(hù)線程是什么?
守護(hù)線程(即daemon thread),是個服務(wù)線程,準(zhǔn)確地來說就是服務(wù)其他的線程。
38. 創(chuàng)建線程有哪幾種方式?
①. 繼承Thread類創(chuàng)建線程類
定義Thread類的子類,并重寫該類的run方法,該run方法的方法體就代表了線程要完成的任務(wù)。因此把run方法稱為執(zhí)行體。
創(chuàng)建Thread子類的實例,即創(chuàng)建了線程對象。
調(diào)用線程對象的start方法來啟動該線程。
②. 通過Runnable接口創(chuàng)建線程類
定義runnable接口的實現(xiàn)類,并重寫該接口的run方法,該run方法的方法體同樣是該線程的線程執(zhí)行體。
創(chuàng)建 Runnable實現(xiàn)類的實例,并依此實例作為Thread的target來創(chuàng)建Thread對象,該Thread對象才是真正的線程對象。
調(diào)用線程對象的start方法來啟動該線程。
③. 通過Callable和Future創(chuàng)建線程
創(chuàng)建Callable接口的實現(xiàn)類,并實現(xiàn)call方法,該call方法將作為線程執(zhí)行體,并且有返回值。
創(chuàng)建Callable實現(xiàn)類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call方法的返回值。
使用FutureTask對象作為Thread對象的target創(chuàng)建并啟動新線程。
調(diào)用FutureTask對象的get方法來獲得子線程執(zhí)行結(jié)束后的返回值。
39. 說一下 runnable 和 callable 有什么區(qū)別?
有點深的問題了,也看出一個Java程序員學(xué)習(xí)知識的廣度。
Runnable接口中的run方法的返回值是void,它做的事情只是純粹地去執(zhí)行run方法中的代碼而已;
Callable接口中的call方法是有返回值的,是一個泛型,和Future、FutureTask配合可以用來獲取異步執(zhí)行的結(jié)果。
40. 線程有哪些狀態(tài)?
線程通常都有五種狀態(tài),創(chuàng)建、就緒、運行、阻塞和死亡。
創(chuàng)建狀態(tài)。在生成線程對象,并沒有調(diào)用該對象的start方法,這是線程處于創(chuàng)建狀態(tài)。
就緒狀態(tài)。當(dāng)調(diào)用了線程對象的start方法之后,該線程就進(jìn)入了就緒狀態(tài),但是此時線程調(diào)度程序還沒有把該線程設(shè)置為當(dāng)前線程,此時處于就緒狀態(tài)。在線程運行之后,從等待或者睡眠中回來之后,也會處于就緒狀態(tài)。
運行狀態(tài)。線程調(diào)度程序?qū)⑻幱诰途w狀態(tài)的線程設(shè)置為當(dāng)前線程,此時線程就進(jìn)入了運行狀態(tài),開始運行run函數(shù)當(dāng)中的代碼。
阻塞狀態(tài)。線程正在運行的時候,被暫停,通常是為了等待某個時間的發(fā)生(比如說某項資源就緒)之后再繼續(xù)運行。sleep,suspend,wait等方法都可以導(dǎo)致線程阻塞。
死亡狀態(tài)。如果一個線程的run方法執(zhí)行結(jié)束或者調(diào)用stop方法后,該線程就會死亡。對于已經(jīng)死亡的線程,無法再使用start方法令其進(jìn)入就緒
41. sleep 和 wait 有什么區(qū)別?
sleep:方法是線程類(Thread)的靜態(tài)方法,讓調(diào)用線程進(jìn)入睡眠狀態(tài),讓出執(zhí)行機(jī)會給其他線程,等到休眠時間結(jié)束后,線程進(jìn)入就緒狀態(tài)和其他線程一起競爭cpu的執(zhí)行時間。因為sleep 是static靜態(tài)的方法,他不能改變對象的機(jī)鎖,當(dāng)一個synchronized塊中調(diào)用了sleep 方法,線程雖然進(jìn)入休眠,但是對象的機(jī)鎖沒有被釋放,其他線程依然無法訪問這個對象。
wait:wait是Object類的方法,當(dāng)一個線程執(zhí)行到wait方法時,它就進(jìn)入到一個和該對象相關(guān)的等待池,同時釋放對象的機(jī)鎖,使得其他線程能夠訪問,可以通過notify,notifyAll方法來喚醒等待的線程
42. notify和 notifyAll有什么區(qū)別?
如果線程調(diào)用了對象的 wait方法,那么線程便會處于該對象的等待池中,等待池中的線程不會去競爭該對象的鎖。
當(dāng)有線程調(diào)用了對象的 notifyAll方法(喚醒所有 wait 線程)或 notify方法(只隨機(jī)喚醒一個 wait 線程),被喚醒的的線程便會進(jìn)入該對象的鎖池中,鎖池中的線程會去競爭該對象鎖。也就是說,調(diào)用了notify后只要一個線程會由等待池進(jìn)入鎖池,而notifyAll會將該對象等待池內(nèi)的所有線程移動到鎖池中,等待鎖競爭。
優(yōu)先級高的線程競爭到對象鎖的概率大,假若某線程沒有競爭到該對象鎖,它還會留在鎖池中,唯有線程再次調(diào)用 wait方法,它才會重新回到等待池中。而競爭到對象鎖的線程則繼續(xù)往下執(zhí)行,直到執(zhí)行完了 synchronized 代碼塊,它會釋放掉該對象鎖,這時鎖池中的線程會繼續(xù)競爭該對象鎖。
43. 線程的 run和 start有什么區(qū)別?
每個線程都是通過某個特定Thread對象所對應(yīng)的方法run來完成其操作的,方法run稱為線程體。通過調(diào)用Thread類的start方法來啟動一個線程。
start方法來啟動一個線程,真正實現(xiàn)了多線程運行。這時無需等待run方法體代碼執(zhí)行完畢,可以直接繼續(xù)執(zhí)行下面的代碼;這時此線程是處于就緒狀態(tài), 并沒有運行。然后通過此Thread類調(diào)用方法run來完成其運行狀態(tài), 這里方法run稱為線程體,它包含了要執(zhí)行的這個線程的內(nèi)容, Run方法運行結(jié)束, 此線程終止。然后CPU再調(diào)度其它線程。
run方法是在本線程里的,只是線程里的一個函數(shù),而不是多線程的。 如果直接調(diào)用run,其實就相當(dāng)于是調(diào)用了一個普通函數(shù)而已,直接待用run方法必須等待run方法執(zhí)行完畢才能執(zhí)行下面的代碼,所以執(zhí)行路徑還是只有一條,根本就沒有線程的特征,所以在多線程執(zhí)行時要使用start方法而不是run方法。
44. 創(chuàng)建線程池有哪幾種方式?
①. newFixedThreadPool(int nThreads)
創(chuàng)建一個固定長度的線程池,每當(dāng)提交一個任務(wù)就創(chuàng)建一個線程,直到達(dá)到線程池的最大數(shù)量,這時線程規(guī)模將不再變化,當(dāng)線程發(fā)生未預(yù)期的錯誤而結(jié)束時,線程池會補充一個新的線程。
②. newCachedThreadPool
創(chuàng)建一個可緩存的線程池,如果線程池的規(guī)模超過了處理需求,將自動回收空閑線程,而當(dāng)需求增加時,則可以自動添加新線程,線程池的規(guī)模不存在任何限制。
③. newSingleThreadExecutor
這是一個單線程的Executor,它創(chuàng)建單個工作線程來執(zhí)行任務(wù),如果這個線程異常結(jié)束,會創(chuàng)建一個新的來替代它;它的特點是能確保依照任務(wù)在隊列中的順序來串行執(zhí)行。
④. newScheduledThreadPool(int corePoolSize)
創(chuàng)建了一個固定長度的線程池,而且以延遲或定時的方式來執(zhí)行任務(wù),類似于Timer。
45. 線程池都有哪些狀態(tài)?
線程池有5種狀態(tài):Running、ShutDown、Stop、Tidying、Terminated
當(dāng)前文章:java跳過代碼 跳出程序的代碼
URL標(biāo)題:http://www.dlmjj.cn/article/doopdcs.html