- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
12第12章Java的线程
第12章 Java的线程 学习内容 线程简介 多线程的互斥与同步 12.1 线程简介 随着计算机的飞速发展,个人计算机上的操作系统也纷纷采用多任务和分时设计。将早期只有大型计算机才具有的系统特性带到了个人计算机系统中。一般可以在同一时间内执行多个程序的操作系统都有进程的概念。 1. 进程:每个进程都有独立的代码和数据空间(进程上下文) ,进程切换的开销大。 2. 线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。 3. 多进程:在操作系统中,能同时运行多个任务程序。 4. 多线程:在同一应用程序中,有多个顺序流同时执行。 线程的概念模型 Java中的线程由三部分组成 : 1. 虚拟的CPU,封装在java.lang.Thread类中; 2. CPU所执行的代码,传递给Thread类; 3. CPU所处理的数据,传递给Thread类; 线程体 Java的线程是通过java.lang.Thread类来实现的。当我们生成一个Thread类的对象之后,一个新的线程就产生了。 下面的几个构造方法: public Thread (); public Thread (Runnable target); public Thread (Runnable target,String name); public Thread (String name); public Thread (ThreadGroup group,Runnable target); public Thread (ThreadGroup group,String name); 其中,group 指明该线程所属的线程组;target实际执行线程体的目标对象,它必须实现接口Runnable; name为线程名。 两种方法实现线程体 : (一)定义一个线程类,它继承线程类Thread并重写其中的方法 run(); (二)提供一个实现接口Runnable的类作为一个线程的目标对象; 线程体的构造 1.通过继承类Thread构造线程体: 参考示例:SimpleThread.java 2.通过接口构造线程体: 参考示例:Clock.java 构造线程体的两种方法的比较: 1. 使用Runnable接口 1) 可以将CPU,代码和数据分开,形成清晰的模型; 2) 还可以从其他类继承; 3) 保持程序风格的一致性。 2. 直接继承Thread类 1) 不能再从其他类继承; 2) 编写简单,可以直接操纵线程,无需使用Thread.currentThread()。 线程的状态 线程的状态 续… 1. 创建状态(new Thread) 执行下列语句时,线程就处于创建状态: Thread myThread = new MyThreadClass( ); 当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。 2. 可运行状态( Runnable ) Thread myThread = new MyThreadClass( ); myThread.start( ); 线程的状态 续… 3. 不可运行状态(Not Runnable) 进入不可运行状态的原因有如下几条: 1) 调用了sleep()方法; 2) 调用了suspend()方法; 3) 为等候一个条件变量,线程调用wait()方法; 4) 输入输出流中发生线程阻塞; 4. 死亡状态(Dead) 线程的终止一般可通过两种方法实现:自然撤消(线程执行完)或是被停止(调用stop()方法)。 12.2 多线程的互斥与同步 前面所提到的线程都是独立的,而且异步执行,也就是说每个线程都包含了运行时所需要的数据或方法,而不需要外部的资源或方法,也不必关心其它线程的状态或行为。但是经常有一些同时运行的线程需要共享数据,此时就需考虑其他线程的状态和行为,否则就不能保证程序的运行结果的正确性。下面的示例说明了此问题。 临界资源问题 一个堆栈Stack类 一个堆栈Stack类 续… 1) 操作之前 2) A执行push中的第一个语句,将r推入堆栈; 一个堆栈Stack类 续… 3) A还未执行idx++语句,A的执行被B中断,B执行pop方法,返回q: 4〕A继续执行push的第二个语句: 最后的结果相当于r没有入栈。产生这种问题的原因在于对共享数据访问的操作的不完整性。 互斥锁 为解决操作的不完整性问题,在Java 语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。 关键字synchronized 来与对象的互斥锁联系。当某个对象用synchron
文档评论(0)