多线程核心知识.docVIP

  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文档。上传文档
查看更多
多线程核心知识

多线程多线程之间的相互协作是用Object类中的wait和notify或者是notifyAll来实现的锁池中的对象要进行等待获取锁关于wait、notify、notifyAll和sleep的关系(重点)1.如果一个线程要调用某个对象的wait方法,调用之前该线程必须要拥有该对象的锁(换句话说,如果一个线程调用了某个对象的wait方法,那么该线程必须要在synchronized中)2.如果一个线程调用了某个对象的wait方法,那么该线程就会释放该对象的锁3.在Java对象中,有两种池(锁池、等待池)4.如果一个线程调用了某个对象的wait方法,那么该线程进入该对象的等待池中(释放锁),如果未来的某一时刻,另外一个线程调用了相同对象的notify或者notifyAll方法,那么在该等待池中等待的线程就会起来进入该对象的锁池中,去等待获取该对象的锁,如果获得该对象的锁成功,那么该线程将继续沿着wait方法之后的路径去执行。5.sleep(long time):如果一个线程调用了sleep方法睡眠,那么在睡眠的同时,它不会失去对该对象的锁的拥有权synchronized详解:1.在某个对象的所有的synchronized方法中,在某个时刻,只能有一个唯一的线程去访问这些synchronized方法2.如果一个方法是synchronized方法,那么该synchronized关键字表示给当前对象(this)上锁3.如果一个synchronized方法是static(静态的)的,那么该synchronized关键字表示给当前对象所对应的Class对象上锁(每个类,不管生成多少对象,其对应的Class对象只有一个)代码示例:题目:请编写一个多线程程序,实现两个线程,其中一个线程完成对某个对象的int成员变量的增加操作,即每次加1,另外一个线程完成对该对象的成员变量的减操作,即每次减一。同时要保证该变量的值不会小于0,不会大于1,该变量的初始值为0.如果是两个线程,需要在MultiThreadClass类中两个方法中的while改成if并在主方法中减少两个线程类的实例public class DeIncreaseThread extends Thread {private MultiThreadClass mtc;public DeIncreaseThread(MultiThreadClass mtc) {this.mtc = mtc;}@Overridepublic void run() {for (int i = 0; i 20; i++) {try {Thread.sleep((long) (Math.random() * 1000));} catch (InterruptedException e) {e.printStackTrace();}mtc.decreate();}}}public class IncreaseThread extends Thread {private MultiThreadClass mtc;public IncreaseThread(MultiThreadClass mtc) {this.mtc = mtc;}@Overridepublic void run() {for (int i = 0; i 20; i++) {try {Thread.sleep((long) (Math.random() * 1000));} catch (InterruptedException e) {e.printStackTrace();}mtc.increase();}}}public class MultiThreadClass {private int number;// 要保证这个变量始终是0或者是1,必须要保证增加方法和减少方法时同步的,即// 不能对这个整数进行同时操作,所以要用同步关键字限制这两个方法public synchronized void increase() {while(number != 0){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}number++;System.out.println(increase==== + number);this.notify();}public synchronized void decreate(){while(number == 0){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}number--;System.out.println(deincr

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档