一胞得、線(xiàn)程的優(yōu)先級(jí)別
線(xiàn)程優(yōu)先級(jí)別的使用范例:
run()方法一結(jié)束捧书,線(xiàn)程也就結(jié)束了苛吱。
二酪术、線(xiàn)程同步
synchronized關(guān)鍵字的使用范例:
線(xiàn)程死鎖的問(wèn)題:
代碼:
package cn.galc.test;
/*這個(gè)小程序模擬的是線(xiàn)程死鎖的問(wèn)題*/
public class TestDeadLock implements Runnable {
public int flag = 1;
static Object o1 = new Object(), o2 = new Object();
public void run() {
System.out.println(Thread.currentThread().getName() + "的flag=" + flag);
/*
* 運(yùn)行程序后發(fā)現(xiàn)程序執(zhí)行到這里打印出flag以后就再也不往下執(zhí)行后面的if語(yǔ)句了
* 程序也就死在了這里,既不往下執(zhí)行也不退出
*/
/* 這是flag=1這個(gè)線(xiàn)程 */
if (flag == 1) {
synchronized (o1) {
/* 使用synchronized關(guān)鍵字把對(duì)象01鎖定了 */
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
/*
* 前面已經(jīng)鎖住了對(duì)象o1翠储,只要再能鎖住o2绘雁,那么就能執(zhí)行打印出1的操作了
* 可是這里無(wú)法鎖定對(duì)象o2,因?yàn)樵诹硗庖粋€(gè)flag=0這個(gè)線(xiàn)程里面已經(jīng)把對(duì)象o1給鎖住了
* 盡管鎖住o2這個(gè)對(duì)象的線(xiàn)程會(huì)每隔500毫秒睡眠一次援所,可是在睡眠的時(shí)候仍然是鎖住o2不放的
*/
System.out.println("1");
}
}
}
/*
* 這里的兩個(gè)if語(yǔ)句都將無(wú)法執(zhí)行庐舟,因?yàn)橐呀?jīng)造成了線(xiàn)程死鎖的問(wèn)題
* flag=1這個(gè)線(xiàn)程在等待flag=0這個(gè)線(xiàn)程把對(duì)象o2的鎖解開(kāi),
* 而flag=0這個(gè)線(xiàn)程也在等待flag=1這個(gè)線(xiàn)程把對(duì)象o1的鎖解開(kāi)
* 然而這兩個(gè)線(xiàn)程都不愿意解開(kāi)鎖住的對(duì)象住拭,所以就造成了線(xiàn)程死鎖的問(wèn)題
*/
/* 這是flag=0這個(gè)線(xiàn)程 */
if (flag == 0) {
synchronized (o2) {
/* 這里先使用synchronized鎖住對(duì)象o2 */
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1) {
/*
* 前面已經(jīng)鎖住了對(duì)象o2挪略,只要再能鎖住o1历帚,那么就能執(zhí)行打印出0的操作了 可是這里無(wú)法鎖定對(duì)象o1,因?yàn)樵诹硗庖粋€(gè)flag=1這個(gè)線(xiàn)程里面已經(jīng)把對(duì)象o1給鎖住了 盡管鎖住o1這個(gè)對(duì)象的線(xiàn)程會(huì)每隔500毫秒睡眠一次杠娱,可是在睡眠的時(shí)候仍然是鎖住o1不放的
*/
System.out.println("0");
}
}
}
}
public static void main(String args[]) {
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.setName("線(xiàn)程td1");
t2.setName("線(xiàn)程td2");
t1.start();
t2.start();
}
}
解決線(xiàn)程死鎖的問(wèn)題最好只鎖定一個(gè)對(duì)象挽牢,不要同時(shí)鎖定兩個(gè)對(duì)象
生產(chǎn)者消費(fèi)者問(wèn)題: