更新時(shí)間:2020-08-19 15:57:42 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2826次
⒈ 寫(xiě)一個(gè)冒泡排序方法
【參考答案】
publicstaticvoid?Bubble(int?a[]){
for?(int?i?=?0;?i?<?a.length;?i++)?{
for?(int?j?=?a.length-1;?j>i;j++)?{
if?(a[j]
⒉ 子線(xiàn)程循環(huán)10次,接著主線(xiàn)程循環(huán)100,接著又回到子線(xiàn)程循環(huán)10次,接著再回到主線(xiàn)程又循環(huán)100,如此循環(huán)50次,請(qǐng)寫(xiě)出程序。
publicclass?ThreadTest?{
publicstaticvoid?main(String[]?args)?{
new?ThreadTest().init();
}
publicvoid?init(){
final?Business?business=new?Business();
new?Thread(
new?Runnable(){
@Override
publicvoid?run()?{
for?(int?i?=?0;?i?<?50;?i++)?{
business.SubThread(i);
}
}
}
).start();
for?(int?i?=?0;?i?<?50;?i++)?{
business.MainThread(i);
}
}
privateclass?Business{
booleanbShouldSub=true;//這里相當(dāng)于定義了控制該誰(shuí)執(zhí)行的一個(gè)信號(hào)燈
publicsynchronizedvoid?MainThread(int?i){
if?(bShouldSub)?{
try?{
this.wait();
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
for?(int?j?=?0;?j?<?5;?j++)?{
System.err.println(Thread.currentThread().getName()+":i="+i+",j="+j);
}
bShouldSub=true;
this.notify();
}
}
publicsynchronizedvoid?SubThread(int?i1){
if?(!bShouldSub)?{
try?{
this.wait();
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
for?(int?j?=?0;?j?<?10;?j++)?{
System.err.println(Thread.currentThread().getName()+":i="+i1+",j="+j);
}
bShouldSub=false;
this.notify();
}
}
}
}
備注:不可能一上來(lái)就寫(xiě)出以上代碼,最初寫(xiě)出來(lái)的代碼如下,問(wèn)題在于兩個(gè)線(xiàn)程的代碼要參照同一個(gè)變量,即這兩個(gè)線(xiàn)程要共享數(shù)據(jù),所以,把這兩個(gè)線(xiàn)程的執(zhí)行代碼搬到同一個(gè)類(lèi)中區(qū):
publicclass?thread?{
privatestaticbooleanbShouldMain=false;
publicstaticvoid?main(String[]?args)?{
/*new?Thread(){
public?void?run()?{
for?(int?i?=?0;?i?<?50;?i++)?{
for?(int?j?=?0;?j?<?10;?j++)?{
System.out.println("i="+i+",j="+j);
}
}
}
}.start();*/
//final?String?str?=new?String("");
new?Thread(new?Runnable()?{
publicvoid?run()?{
for?(int?i?=?0;?i?<?50;?i++)?{
synchronized?(Thread.class)?{
if?(bShouldMain)?{
try?{
ThreadTest.class.wait();
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
for?(int?j?=?0;?j?<?10;?j++)?{
System.out.println(Thread.currentThread().getName()+":i="+i+",j="+j);
}
bShouldMain=true;
ThreadTest.class.notify();
}
}
}
}).start();
for?(int?i?=?0;?i?<?50;?i++)?{
if?(!bShouldMain)?{
try?{
ThreadTest.class.wait();
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
for?(int?j?=?0;?j?<5;?j++)?{
System.out.println(Thread.currentThread().getName()+":i="+i+",j="+j);
}
bShouldMain=false;
ThreadTest.class.notify();
}
}
}
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“面試常出現(xiàn)的Java上機(jī)練習(xí)題及答案”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)