java線程間通信方式
① java中線程間怎麼通訊什麼叫僵死線程
死鎖?兩個線程互相占著資源,其中一個sleep了就死那了
② java中怎麼實現兩個線程的信息傳遞
java兩個線程之間可以通過使用全局變數,然後使用set和get方法就可以傳遞變數,實例如下:
publicstaticStringpub="";
publicstaticvoidmain(String[]args){
finalThreadt2=newThread(){
@Override
publicvoidrun(){
//列印線程1傳遞過來的值
System.out.println(pub);
}
};
Threadt1=newThread(){
@Override
publicvoidrun(){
Stringthread1="thread1";
//將值thread1傳遞給線程2
pub=thread1;
t2.start();
}
};
t1.start();
}
③ java 進程間通訊的有幾種方法
JAVA進程間通信的方法主要有以下幾種:
(1)管道(Pipe):管道可用於具有親緣關系進程間的通信,允許一個進程和另一個與它有共同祖先的進程之間進行通信。
(2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,除具有管道所具有的功能外,它還允許無親緣關系進程間的通信。
(3)信號(Signal):信號是比較復雜的通信方式,用於通知接受進程有某種事件發生,除了用於進程間通信外,進程還可以發送 信號給進程本身。
(4)消息(Message)隊列:消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列。
(5)共享內存:使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的。
(6)內存映射(mapped memory):內存映射允許任何多個進程間通信,每一個使用該機制的進程通過把一個共享的文件映射到自己的進程地址空間來實現它。
(7)信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段。
(8)套介面(Socket):更為一般的進程間通信機制,可用於不同機器之間的進程間通信。
④ 如何實現java線程間
線程間的通信方式
同步
這里講的同步是指多個線程通過synchronized關鍵字這種方式來實現線程間的通信。
參考示例:
public class MyObject {
synchronized public void methodA() {
//do something....
}
synchronized public void methodB() {
//do some other thing
}
}
public class ThreadA extends Thread {
private MyObject object;
//省略構造方法
@Override
public void run() {
super.run();
object.methodA();
}
}
public class ThreadB extends Thread {
private MyObject object;
//省略構造方法
@Override
public void run() {
super.run();
object.methodB();
}
}
public class Run {
public static void main(String[] args) {
MyObject object = new MyObject();
//線程A與線程B 持有的是同一個對象:object
ThreadA a = new ThreadA(object);
ThreadB b = new ThreadB(object);
a.start();
b.start();
}
}
由於線程A和線程B持有同一個MyObject類的對象object,盡管這兩個線程需要調用不同的方法,但是它們是同步執行的,比如:線程B需要等待線程A執行完了methodA()方法之後,它才能執行methodB()方法。這樣,線程A和線程B就實現了 通信。
這種方式,本質上就是「共享內存」式的通信。多個線程需要訪問同一個共享變數,誰拿到了鎖(獲得了訪問許可權),誰就可以執行。
⑤ java的線程之間如何進行消息傳遞
原生Java線程之間只能通過共享內存(同一個虛擬機內)來通信,當然你可以通過自己實現,使得線程看起來可以通過消息通信(比如Scala的Actor)
可以通過消息傳遞,但Actor本身和線程是有很大不同,不過看起來具備了一些線程功能。