线程进程安全概述.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章线程/进程安全进程和线程是两个范围不同的概念。进程是程序在计算机上的一次执行活动。运行一个程序,相当于启动了一个进程。进程是操作系统进行资源分配的单位,通俗地讲,是一个正在执行的程序。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。比如,一个在线播放软件,在播放歌曲的同时还可以进行下载,就可认为这两件工作由不同的线程完成。线程和进程的开发和相关操作,在程序设计中具有重要地位,线程和进程的安全和系统的安全息息相关。对于不够熟练的程序员来说,很容易出现安全隐患,而这些安全问题又具有不间断发生,难于调试等特点。一般说来,线程的安全性主要来源于其运行的并发性和对资源的共享性;进程的安全性主要在应用级别,在于其对系统的威胁性,不过对于系统软件的开发者,进程安全的考虑需要更加深入。本章主要针对线程和进程开发过程中的安全问题进行讲述,首先基于面向对象语言,讲解线程的的基本机制,然后讲解线程操作过程中的几个重要的安全问题:线程同步安全、线程协作安全、线程死锁、线程控制,最后讲解进程安全。3.1 线程机制3.1.1 为什么需要线程由于Java在线程操作方面具有较好的面向对象特性,也具有一定的代表性本章基于Java语言进行讲解。实际上,多线程最直观的说法是:让应用程序看起来好像同时能做好几件事情。为了表达这个问题,我们用一个案例来说明。比如,需要在控制台上每隔1秒钟打印一个欢迎信息。代码如下所示: public class P03_01 { public static void main(String[] args) { while(true) { System.out.println(Welcome); try { Thread.sleep(1000); }catch(Exception ex){} } System.out.println(其他工作); //代码行1 } }该程序似乎没有什么问题,运行时,Welcome也能不断打印。但是,我们发现,打印函数中的while循环是个死循环,也就是说,这个死循环不运行完毕,程序将不能作其他事情。比如,程序中的代码行1永远也无法运行。这就给程序的功能形成了巨大的阻碍。在实际应用开发的过程中,经常会出现一个程序看起来同时作好几件事情的情况,如?? 程序进行一个用时较长的计算,希望该计算进行的时候,程序还可以做其他事情;程序进行一个用时较长的计算,希望该计算进行的时候,程序还可以做其他事情; 软件要能够接受多个客户的请求,而让客户感觉不出等待; 媒体播放器在播放歌曲的同时也能下载电影; 财务软件在后台进行财务汇总的同时还能接受终端的请求;等等。 在这些情况下,多线程就能够起到巨大的作用。线程和进程的关系很紧密,进程和线程是两个不同的概念,但是进程的范围大于线程。通俗地说,进程就是一个程序,线程是这个程序能够同时做的各件事情。比如,媒体播放机运行时就是一个进程,而媒体播放机同时做的下载文件和播放歌曲,就是两个线程。以上代码如果用线程来进行开发,在Java语言里面,就可以用如P03_02.java的方式(其他语言类似) 。运行,就会发现,此时“打印欢迎信息”和“其他工作”就“同时”做了。3.1.2 线程机制和生命周期每个程序至少自动拥有一个线程,称为主线程。当程序加载到内存时,启动主线程。从上节的程序可以看出,代码行:实际上相当于实例化一个新的线程对象,并运行该线程中的run()函数。该线程的运行并不影响主线程向下执行,这是为什么呢?这是由于多线程的机制实际上相当于CPU交替分配给不同的代码段来运行:也就是说,某一个时间片,某线程运行,下一个时间片,另一个线程运行,各个线程都有抢占CPU的权利,至于决定哪个线程抢占,是操作系统需要考虑的事情。由于时间片的轮转非常快,用户感觉不出各个线程抢占CPU的过程,看起来好像计算机在“同时”做好几件事情。WelcomeThread wt = new WelcomeThread(); wt.start(); 一个线程有从创建、运行到消亡的过程,称为线程的生命周期。用线程的状态(state)表明线程处在生命周期的哪个阶段。线程有创建、可运行、运行中、阻塞、死亡五种状态。通过线程的控制与调度可使线程在这几种状态间转化。这五种状态详细描述如下:1:创建状态:使用new运算符创建一个线程后。该线程仅仅是一个空对象,系统没有分配资源。2:可运行状态:使用start()方法启动一个线程后,系统分配了资源,使该线程处于可运行状态(Runnable)。3:运行中状态:占有CPU,执行线程的run()方法。4:阻塞状态:运行的线程因某种原因停止继续

文档评论(0)

老师驿站 + 关注
官方认证
文档贡献者

专业做教案,有问题私聊我

认证主体莲池区卓方网络服务部
IP属地北京
统一社会信用代码/组织机构代码
92130606MA0GFXTU34

1亿VIP精品文档

相关文档