真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

以下java代碼輸出線程,每一個java線程可以看成由代碼

誰幫我實現以下Java中的線程交替執(zhí)行控制,要求按順序輸出1到100,代碼如下。

稍微修改下?? 未測試

為利辛等地區(qū)用戶提供了全套網頁設計制作服務,及利辛網站建設行業(yè)解決方案。主營業(yè)務為做網站、網站制作、利辛網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

package?com.leejiliang.HomeworkDemo2;

/**

*?定義打印輸出類,定義兩個數據輸出方法,分別用于輸出偶數和奇數

*?

*?@author?Administrator?even偶數?uneven奇數

*/

class?PrintNumber?{

boolean?isEven?=?true;

public?void?printEven()?{

for?(int?i?=?0;?i?=?100;?i?=?i?+?2)?{

if?(i?%?2?==?0)?{

synchronized?(this)?{

while?(!isEven)?{

try?{

this.wait();

}?catch?(InterruptedException?e)?{

//?TODO?Auto-generated?catch?block

e.printStackTrace();

}

}

System.out.println("偶數:"?+?i);

isEven?=?false;

this.notify();

}

}

}

}

//?輸出1到100之間的奇數

public?void?printUnEven()?{

for?(int?i?=?1;?i?=?99;?i?=?i?+?1)?{

if?(i?%?2?!=?0)?{

synchronized?(this)?{

while?(isEven)?{

try?{

this.wait();

}?catch?(InterruptedException?e)?{

//?TODO?Auto-generated?catch?block

e.printStackTrace();

}

}

System.out.println("奇數:"?+?i);

isEven?=?true;

this.notify();

}

}

}

}

}

/**

*?

*?@author?Administrator?定義輸出偶數的線程類

*/

class?ThreadForEven?implements?Runnable?{

private?PrintNumber?pn?=?null;

public?ThreadForEven(PrintNumber?pn)?{

this.pn?=?pn;

}

@Override

public?void?run()?{

pn.printEven();

}

}

/**

*?定義輸出奇數的線程類

*?

*?@author?Administrator

*

*/

class?ThreadForUneven?implements?Runnable?{

private?PrintNumber?pn?=?null;

public?ThreadForUneven(PrintNumber?pn)?{

this.pn?=?pn;

}

@Override

public?void?run()?{

pn.printUnEven();

}

}

//?主函數,執(zhí)行兩個線程

class?ZeroToOneHundred?{

public?static?void?main(String[]?args)?{

PrintNumber?pn?=?new?PrintNumber();

ThreadForEven?te?=?new?ThreadForEven(pn);

ThreadForUneven?tu?=?new?ThreadForUneven(pn);

Thread?threadeven?=?new?Thread(te);

Thread?threaduneven?=?new?Thread(tu);

threadeven.start();

threaduneven.start();

}

}

java線程問題:為什么以下代碼調用同樣的線程輸出的結果不一樣呢?一個是輸出1-10,一個輸出的全是1

首先說用M定義的線程,這里M相當于繼承線程方法的類,在這個類里給它定義了線程方法。當在public方法里創(chuàng)建M的實例時,類M中的方法也被實例化了,所以當用t.start();啟動線程時,是啟動的M中的線程。再說for中的,和上邊完全相反,這個線程只是開啟了線程,并沒有定義其它方法,當程序運行時能和上邊程序同時運行,所以都是1,這是for循環(huán)的結果

java多線程編程代碼如下,輸出結果如下:

首先,你同步的是具體的某個Test實例, 對于那個實例來說,實際上只有一個線程訪問了那個代碼塊,但是sum和other卻是多個線程同時去進行訪問,實際上這是不安全的,如果你想實現每次都輸出10000的效果,那么正確的應該是在Test.class上加鎖,而不是獲取Test實例的鎖,修改后的代碼如下:

public?class?Test?extends?Thread?{

public?static?int?sum?=?10000;

public?static?int?other?=?0;

public?void?getMoney()?{

synchronized?(Test.class)?{

System.out.println(Thread.currentThread().getName()?+?"?開始執(zhí)行");

sum?=?sum?-?100;

System.out.println("sum-100");

other?=?other?+?100;

System.out.println("other+100");

System.out.println(sum?+?other);

System.out.println(Thread.currentThread().getName()?+?"?執(zhí)行完成");

}

}

public?void?run()?{

getMoney();

}

public?static?void?main(String[]?agrs)?{

Thread?t[]?=?new?Thread[10];

for?(int?i?=?0;?i?=?9;?i++)?{

t[i]?=?new?Test();

t[i].start();

}

}

}

// 上面代碼能得到你的結果


文章名稱:以下java代碼輸出線程,每一個java線程可以看成由代碼
網頁鏈接:http://weahome.cn/article/dseiihj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部