Ⅰ java 進程間通訊的有幾種方法
JAVA進程間通信的方法主要有以下幾種:
(1)管道(Pipe):管道可用於具有親緣關系進程間的通信,允許一個進程和另一個與它有共同祖先的進程之間進行通信。
(2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,除具有管道所具有的功能外,它還允許無親緣關系進程間的通信。
(3)信號(Signal):信號是比較復雜的通信方式,用於通知接受進程有某種事件發生,除了用於進程間通信外,進程還可以發送 信號給進程本身。
(4)消息(Message)隊列:消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列。
(5)共享內存:使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的。
(6)內存映射(mapped memory):內存映射允許任何多個進程間通信,每一個使用該機制的進程通過把一個共享的文件映射到自己的進程地址空間來實現它。
(7)信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段。
(8)套介面(Socket):更為一般的進程間通信機制,可用於不同機器之間的進程間通信。
Ⅱ java多個類共享一個類中的變數
你這個已經是2個進程了吧。調用了2個main方法。啟動了兩個java進程。
簡單的這樣不可能實現跨進程訪問變數的
而且你運行兩次了,的到的t2都不一樣的。
如果你把 Test5里的main方法的方法體復制到 Test3的最後面,運行Test3的main方法 是不會報空指針的吧。
如果在同一main方法運行的代碼中, 你可以使用定義一個介面
interface Test2StrChangeListener{
void onStrChange(String oldValue,String newValue);
}
然後再在Test2中定義一個泛型集合,List<Test2StrChangeListener> listeners;並修改Test2中的setStr方法:
public void setStr(String str) {
String oldValue = this.str;
String newValue = str;
this.str = str;
if(this.listeners != null )
{
listeners.onStrChangeListener(oldVaule,newValue);
}
}
然後在Test3 和 Test5中實現該介面Test2StrChangeListener。
再在Test3的main方法中將Test3和Test5的實例,添加到Test2中的listeners集合裡面去。
以後當調用Test2的setStr方法的時候,就好把新值和舊值傳到listeners裡面的實例去。
在Test3和Test5裡面就可以時時刻刻知道 Test2.str的最新值了。
Ⅲ Java:共享成員變數是什麼意思啊
Java共享成員變數是指在同一個類中或者不同包下的類,使用同一個變數進行操作。示例如下:
publicclassCar{
privateStringcolor;//定義汽車顏色,全局變數
privateintnumLuntai;//定義汽車輪胎數,全局變數
publicCar(Stringcolor,intnumLuntai){
super();
this.color=color;
this.numLuntai=numLuntai;
}
publicvoidrun(){
System.out.println(this.numLuntai+"個輪子的"+this.color+"轎車在馬路上行駛著");
}
}
publicclassClassTest{
publicstaticvoidmain(String[]args){
Carbmw=newCar("黑色",4);//創建一個轎車對象,名字為bmw
bmw.run();
}
}