- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * 6.1.1 控制线程结束 通常,在线程任务中(run()方法)通过一个循环来控制线程的结束。如果循环是一个确定次数的循环,则循环结束后,线程运行就结束了,线程进入终止状态。 public void run(){ int i = 0; while(i 100){ i ++; System.out.println(i = + i ); } } 6.1.1 控制线程结束 如果run()方法是一个不确定循环,一般是通过设置一个标志变量,在程序中通过改变标志变量的值实现结束线程。 在Thread类中被标明为不推荐使用的方法: void stop() void suspend() void resume() 6.1.1 线程同步与对象锁 6.1.1 线程冲突与原子操作 多线程环境下,多个线程需要共享数据资源,因此可能存在多个并发线程同时访问同一资源,这可能引起线程冲突的情况。 假设有一个计数器Counter类,它作为共享数据资源。 当两个操作运行在不同线程中,对同一个数据的两个操作就可能产生冲突。其原因是有些操作看起来是简单操作,但不是原子的,虚拟机需要用多个步骤完成。 6.1.1 线程冲突与原子操作 如表达式: count++; 1)检索count的当前值。 2)为检索到的值加1。 3)增加1后的值存到count中。 6.1.1 线程冲突与原子操作 对于Counter对象,两个线程A和B。线程A调用increment()方法,同时线程B也调用increment()方法。如果count的初值为0,它们交错的动作可能按下列顺序执行。 1)线程A:检索count的值0。 2)线程B:检索count的值0。 3)线程A:将count加1,count的结果为1。 4)线程B:将count加1,count的结果为1。 5)线程A:将结果存回count,count的值为1。 6)线程B:将结果存回count,count的值为1。 6.1.1 方法同步 要防止多个线程同时访问同一资源产生冲突,就是防止多个线程同时执行共享对象的方法代码。程序中这样的代码称作临界区(critical section)。 为保证临界区中的代码在一段时间内只被一个线程执行,应在线程开始执行临界区代码时,给临界区加锁,这样,其他线程在这个临界区被解锁之前,无法执行临界区的代码,在其被解锁之后,其他线程才可以锁定并执行其中的代码。 6.1.1 方法同步 Java的每个对象都有一个内在锁(intrinsic lock),有时也称作监视器锁(monitor lock)。 获得对象的内在锁是能够独占该对象访问权的一种方式。获得对象的内在锁与锁定对象是一样的。 Java通过同步代码块实现内在锁,Java支持两种同步: 1)方法同步 2)块同步 方法同步就是在定义方法时使用synchronized关键字。 6.1.1 块同步 如果使用类库中的类或别人定义的类时,调用的方法没有使用synchronized关键字修饰,又要获得对象锁,可以使用下面的格式: synchronized(object){ // 方法调用 } 6.1.1 块同步 下面代码利用非线程安全的Counter类作为计数器,为了在计数器递增的时候将计数器对象锁定,incrementCount()方法锁定Counter对象。 Counter counter = new Counter(); public void incrementCount(){ synchronized (counter){ // 锁定counter对象 // 执行需要同步的语句 counter.increment(); } } 6.1.1 类锁 每个类也可以有类锁。类锁控制对类的synchronized static代码的访问。请看下面的例子。 public class SampleClass{ static int x, y; static synchronized void increment(){ x++; y++; } } 6.1.1 线程协调 6.1.1 简单的生产者消费者模型 生产者Producer 5 消费者 Consumer Box 要求生产者产生一个数字(0-9),消费者取得一个数字。不能出现生产者太快,或消费者太快的情况。 6.1.1 简单的生产者消费者模型 Box.java Pr
文档评论(0)