您的位置:首页 > 编程语言 > Java开发

[java多线程]进程和线程

2014-08-23 19:18 295 查看
先来一个图,eclipse里调试java程序,

程序具体功能可以忽略了,在main函数打一个断点,然后调试这个程序。



看到有一个Java Application在运行,名字和我们的类名相同,

看到运行了一个javaw.exe进程,同时windows任务管理器中可以看到,

然后看到调用堆栈,看到类(完整类名)被加载,有一个线程Thread [main]运行并暂停在之前设置断点的地方,

这里不打算深入研究jvm运行程序的过程,只是想说明一点,程序并不是直接在进程中运行的,而是在其中的某个线程里运行的。

java程序进程和线程的关系:

如果在eclipse里启动tomcat,就会有一个javaw.exe的进程,每个servlet请求到来就会有一个线程为他服务;

如果是控制台程序,就像我们最开始看到的,就会有一个javaw.exe进程,里面肯定有一个主线程在运行,后面还可能有别的线程同时运行;

如果是窗口程序,比如awt或swing,就可能有多个javaw.exe进程,可能一个窗口对应一个进程,每个窗口会有主线程和其它线程为他服务。

很明显的一点结论,一个进程里会有多个线程在运行。

为什么要有进程和线程呢?

一个程序对应一个进程,操作系统在同一时刻运行了多个程序,这样我们才能一边听歌,一边看网页,一边和朋友聊天等等;

一个线程对应程序里的一个子任务,一个程序需要同时做很多事情,播放选中的歌曲,显示对应的歌词,同时还能让我们去调整音量和播放进度等等;

进程和线程都能让我们并发的做一些事情,他们又各有什么优缺点呢?

进程的优点:

进程间相对独立,一般来说一个进程奔溃不会影响其它进程;

调度进程比较容易,一个进程可以创建其它进程,并且他们直接的耦合度比较低,进程空间都是独立的,并且父进程先退出子进程也可以运行;

横向扩展比较方便,比如tomcat集群,每个tomcat服务都是一个进程,需要增加整体性能时甚至不需要调整程序,只需要多复制一份tomcat服务并调整配置即可;

进程的缺点:

进程创建和维护消耗系统资源比较大;

进程间共享数据和通信的性能比较差,实现难度比较大;

线程的优点:

创建和维护线程消耗系统资源比较小;

线程间共享数据和通信的方式多、容易实现、性能好;

线程的缺点:

受限于所属进程的地址空间,横向扩展有一定限制;

稳定性差,一个线程奔溃可能导致整个进程崩溃,影响其它线程的运行;

线程调度相对复杂,需要考虑进程内部资源冲突的情况;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: