[java多线程]进程和线程

先来一个图,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服务并调整配置即可;

进程的缺点:

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

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


线程的优点:

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

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

线程的缺点:

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

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

线程调度相对复杂,需要考虑进程内部资源冲突的情况;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值