Java中線程通訊協作

2021-07-14 12:32:19 字數 3631 閱讀 3660

packagecom.cloud.day1;

/*執行緒的建立方式二:

1.自定義乙個類實現

runnable

介面2.

實現介面的

run方法,把自定義執行緒的任務定義在

run方法中

3.建立

runnable

實現類物件

4.建立

thread

類實現物件,並把

runnable

實現類物件作為引數傳遞進去

5.呼叫

thread

類物件的

start

方法開啟乙個執行緒

注意:runnable

實現類物件不是執行緒物件,只有

thread

類和其子類建立的物件才是執行緒物件

*/public

classdemo6implementsrunnable

}public

static

voidmain(string args)

} }

packagecom.cloud.day1;

/*建立執行緒的第二種方式模擬購票系統

*/classsaleticket2implementsrunnable

else

} }} }

public

classdemo7 }

/*執行緒通訊:

乙個執行緒完成了自己的任務時,要通知另外乙個執行緒去完成另外乙個任務

.生產者與消費者

wait(): 

等待如果執行緒執行了

wait

方法,那麼該執行緒會進入等待的狀態,等待狀態下的執行緒必須要被其他執行緒呼叫

notify

方法才能喚醒。

notify():喚醒

喚醒執行緒池等待執行緒其中的乙個。

notifyall() :

喚醒執行緒池所有等待

執行緒。wait

與notify

方法要注意的事項:

1. wait

方法與notify

方法是屬於

object物件的

。2.

wait

方法與notify

方法必須要在同步**塊或者是同步函式中才能

使用。3.

wait

方法與notify

方法必需要由鎖物件呼叫

。問題一:出現了執行緒安全問題。

**錯亂了

...*/

//產品類

classproduct

//生產者

classproducerextendsthread

@override

public

voidrun()else

system.out

.println("

生產者生產出了:

"+ p.name+"

**是:

"+ p.price);

p.flag =true;

i++;

p.notifyall(); //

喚醒消費者去消費

}elsecatch(interruptedexception e)

}       

}  } }

} //

消費者classcustomerextendsthread 

@override

public

voidrun()elsecatch(interruptedexception e)

} }} 

} }public

classdemo1 }

packagecom.cloud.day1;

/* 執行緒的停止:

1.停止乙個執行緒,一般使用乙個變數來控制

2.如果需要停止乙個處於等待狀態下的執行緒,需要變數配合notify()和interrupt()使用

*/public

classdemo2extendsthread

@override

public

synchronized

voidrun()catch(interruptedexception e)

system.out

.println(thread.currentthread().getname()+":"+i);

i++;

} }public

static

voidmain(string args)

} } }

/*守護執行緒

(後台執行緒

):如果乙個程序只剩下守護執行緒,守護執行緒也會死亡

執行緒預設都不是守護執行緒

*/public

classdemo1extendsthread

@override

public

voidrun()

trycatch(interruptedexception e)

} }public

static

voidmain(string args) }

/*join()

方法模擬:兩個坐車沒買票,其中乙個去買票

*/classoneextendsthreadcatch(interruptedexception e)

system.out

.println("..............");

system.out

.println("

買票上車

"); }

}classotherextendsthreadcatch(interruptedexception e)

system.out

.println("

有票了");

} }public

classdemo2 }

java中線程問題

24.09 多執行緒 獲取名字和設定名字 掌握 1.獲取名字 通過getname 方法獲取執行緒物件的名字 2.設定名字 通過建構函式可以傳入string型別的名字 new thread start new thread yyy start 通過setname string 方法可以設定執行緒物件的...

程序中線程間通訊

一般而言,應用程式中的乙個次要執行緒總是為主執行緒執行特定的任務,這樣,主線程和次要執行緒間必定有乙個資訊傳遞的渠道,也就是主線程和次要執行緒間要進行通訊。這種執行緒間的通訊不但是難以避免的,而且在多執行緒程式設計中也是複雜和頻繁的,下面將進行說明。由於屬於同乙個程序的各個執行緒共享作業系統分配該程...

JAVA中線程同步方法

在這裡看到的 1 wait方法 該方法屬於object的方法,wait方法的作用是使得當前呼叫wait方法所在部分 塊 的執行緒停止執行,並釋放當前獲得的呼叫wait所在的 塊的鎖,並在其他執行緒呼叫notify或者notifyall方法時恢復到競爭鎖狀態 一旦獲得鎖就恢復執行 呼叫wait方法需要...