Java并发初识

Java程序的封闭性与再现性

封闭性:程序一旦开始运行,其计算结果就只取决于程序本身,除了人为地改变机器的运行状态或机器故障以外,没有其它因素能够对程序的运行过程施加影响。

再现性:就是当机器在同一数据集上重复执行同一程序时,机器内部的动作系列完全相同,最后获得的结果也相同。 

资源共享与并发

资源共享:系统中的软、硬件资源不再为单个用户程序独占,而由几道用户程序共同使用。 

并发:在系统运行时,系统中不再只有一个活动,而是存在着许多并行的活动 。 

程序与进程

  • 进程是执行程序的动态过程,而程序是进程运行的静态文本,进程离开了程序也就没有了存在的意义 ;
  • 一个进程可以执行一个或多个程序 ,同一程序也可能由多个进程同时执行 ;
  • 程序可以作为一种软件资源长期保持着,而进程则是一次执行过程,它是暂时的,是动态地产生和终止的 。
进程通常由三部分组成,程序,数据集合,进程控制块(ProcessControlBlock,简记 PCB) 。

并发性:把系统作为一个整体来观察,则在任一时刻有若干进程存在于系统的这一部分或那一部分,这些进程都处在其起点和终点之间。我们把所有这些进程都看成是正在系统中运行着、活跃着 ;

不确定性:当多个进程并行操作,依赖于多方的因素,操作系统外部表现出来的不确定性就是内部动作序列不可预测、不易复现的反应 。

进程与线程

线程:一般的讲,线程是一个程序,或者进程内部的一个顺序控制流。线程本身不能独立运行,必须在进程中执行,使用进程的地址空间。每个线程有自己单独的程序计数器 。

多线程和多进程的差异:创建进程的高消耗(每个进程都有独立的数据和代码空间),进程之间通信的不方便(消息机制),进程切换的时间太长,这些导致了多线程的提出。而线程切换代价就很少,线程是可以共享内存的。所以采用多线程在切换上花费的比多进程少得多 。(超线程技术本质是多线程硬件化,所以也会加快程序的执行速度)

总之,进程内的同一类线程可以共享代码和数据空间,每个线程有独立的运行栈和程序计数器,切换的开销比较小,灵活性高。在支持超线程和多核的 CPU 上,多线程能够并发或者并行执行,可以在同一时间段内完成不同的任务,或者加快程序的执行。同一进程内的多个线程,调度比较灵活,可以相互协调和协作共同完成特定任务。

线程

线程组成:虚拟 CPU(java.lang.Thread 类),虚拟 CPU 执行的代码和数据。

线程池

Java 自从 5.0 以来,提供了线程池。线程的目标执行对象可以共享线程池中有限数目的线程对象。一般的服务器都需要线程池,比如 WebFTP 等服务器,不过它们一般都自己实现了线程池,比如 TomcatResin Jetty 等,现在 JDK 本身提供了,我们就没有必要重复造车轮了,直接使用就可以,何况使用也很方便,性能也非常高。 
 




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值