Ⅰ 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();
}
}