您好,欢迎来到微智科技网。
搜索
您的当前位置:首页Java的Main方法与Java进程之间的关系

Java的Main方法与Java进程之间的关系

来源:微智科技网
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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务