Java的Main方法与Java进程之间的关系
来源:互联网 发布:趣医网软件开发面试 编辑:程序博客网 时间:2024/06/11 16:24
Java应用程序的入口就是main方法()!
启动一个Java应用程序,就是要运用它的main方法,这时候就启动了一个Java虚拟机------在Windows下查看任务管理器,就会发现多出了一个javaw.exe的进程,这个就是java虚拟机!而main()方法其实是Java虚拟机这个进程的一个主线程(默认至少还有一个垃圾回收器的守护线程,所以运行一个java应用程序,启动了一个java进程的同时,至少又启动了2个java线程)!main方法执行结束,java虚拟机自动就销毁了,进程就结束啦!
所以,我们同时运行了2个java类的main()方法,这时候操作系统会启动2个java进程。
但是,Java进程间是不能直接通信的------除非采用JMS,WebService等技术,给外部调用程序一个接口!(这就是Java的安全性啦)
例如:
public class Test1 {
public static int num = 10;
public static void main(String[] args) {
while (true) {
System.out.println("-------num-----" + num);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
运行Test1类,会每隔10秒打印它的成员变量num值!
我们写一个java程序,来修改它的它的成员变量num值
public class Test2 {
public void changeNum() {
Test1.num = 100;
}
public static void main(String[] args) {
Test2 t = new Test2();
t.changeNum();
System.out.println("num=====" + Test1.num);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行后会发现,Test1类中打印的num值根本没有变化!!!!很简单,因为它们是2个java应用程序,不可能直接通信!
有人会怀疑:是否可以在Test1类中添加一个静态方法,修改num值,然后让外部类调用,这样来改变num的值-------答案是不行的!具体深入的理解,就需要了解Java虚拟机的运行机制啦!
//================================================================
关于Java进程通信,这是个很值得研究的问题;先看看传统的进程间通信的手段有什么,无外乎还是以下的这些手段:
(1) 管道(PIPE)
(2) 命名管道(FIFO)
(3) 信号灯(Semphore)
(4) 消息队列(MessageQueue)
(5) 共享内存(SharedMemory)
(6) Socket(当然也有Socket)
如果加上上面提到的临时文件(临时文件其实是很难处理的,不同的进程间单靠临时文件可以交互信息,但是做到进程的调度控制确是很费力的事情,当然也不是不能做到),而首选的通信方法就是Socket通信!
参考:http://topic.csdn.net/t/20031209/18/2545703.html
http://sungyi.javaeye.com/blog/392813
- Java的Main方法与Java进程之间的关系
- Java的Main方法与Java进程之间的关系
- linux内存与java进程之间的关系
- Java 进程与main方法
- JAVA 线程和进程之间的关系
- java的main方法
- java类与类之间的关系
- Java类与类之间的关系
- java与云计算之间的关系
- Java 类与类之间的关系
- Java类与类之间的关系
- java类与类之间的关系
- Java类与类之间的关系
- Java类与类之间的关系
- scala与java之间的关系
- Java类与类之间的关系
- 疯狂java 线程与进程的关系
- JAVA 进程与线程之间的区别
- NO.9 部署FTP服务
- Lua table(表)
- 安卓MVP设计模式
- 圆角矩形
- Oracle查看用户所在表空间
- Java的Main方法与Java进程之间的关系
- 在linux下安装eclipse 最新版eclipse-jee-neon-2-linux-gtk-x86_64.tar.gz
- 学习GitHub(四): git config
- QT的pro文件编写,高效简洁,,路径设置 有空格 引入系统环境变量等
- Java中Properties类的操作
- 一道面试题引发的对javascript类型转换的思考
- 读懂makefile一
- 第一篇c++问题总结,写在这里……
- 学习GitHub(五): 远程仓库和本地仓库