Java_线程交流..ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java_线程交流.

多线程交流讨论 线程模型 直接创建 继承Thread 类,并覆盖 run() 方法 实现 Runnable 接口的类,并实现 run() 方法 同一个实现了Runnable接口的对象作为参数产生的所有Thread对是同一对象下的线程(TestRunnable2) 抽象线程创建 生命周期 生命周期 新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建 状态。 就绪:处于新建状态的线程被启动后,将进入线程队列排队等待CPU服务,此时它已经具备了运行的条件,一旦轮到它来享用CPU资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。 运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态。每一个Thread类及其子类的对象都有一个定义了这个线程的操作和功能的run()方法,当线程对象被调度执行时,它将自动调用本对象的run()方法,从第一句开始顺次执行。。 阻塞:暂停以等待某个条件发生;sleep();试图得到一个被别的线程持有的锁,将让出CPU并暂时中止自己的执行,进入阻塞状态。阻塞时它不能进入排队队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续运行。 死亡:处于死亡状态的线程不具有继续运行的能力。 操作 wait()---suspend() notify() ,notifyAll()----resume() wait和notify是所有对象所具有的方法,必须在Synchronized语句块内使用,可以用来做消息通知的,而suspend\resume只是线程的方法 当调用了wait方法后,当前线程就会被挂起并且会释放锁,直到其他线程调用了该对象的notify方法。suspend是挂起当前线程,不会释放锁,resume是恢复当前线程地执行(不赞成使用) 操作 sleep() 1) sleep ()函数有一个参数,通过参数可使线程在指定的时间内进入停滞状态,当指定的时间过后,线程则自动进入可执行状态。 2) 当调用 sleep ()函数后,线程不会释放它的锁。 yield() 1) 通过yield ()函数,可使线程进入可执行状态,排程器从可执行状态的线程中重新进行排程。所以调用了yield()的函数也有可能马上被执 2) 当调用yield ()函数后,线程不会释放它的“锁标志”。 区别: 1) sleep()使当前线程进入停滞状态,所以执行 sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。 2) yield()只能使同优先级的线程有执行的机会。 操作 join() 使调用join()的线程执行完毕后才能执行其它线程,在一定意义上,它可以实现同步的功能。 多线程同步 同一进程的多个线程共享同一片存储空间,同步为了避免同一个数据对象或者同一片存储空间被多个线程同时访问。 Volatile Synchronized Sync接口(1.5) 锁 互斥(mutual exclusion):在同一时刻只能有一个线程访问对象 类锁和实例锁 类锁是一个static object来担任的。当然也可以采用类本身的类对象来作为类锁。 static synchronized method(){} sychronized(classname.class) 实例锁 sychronized method(){} sychronized (objectReference) {/*block*/} 类锁和实例锁分别取得 Volatile 轻量级的同步 ,保证可见性但不保证原子性 可见性:确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一 个线程是可见的 原子性:不可中断的一个或一系列操作 public class TestRaceCondition { ??? private volatile int i = 0;? public void increase() { ??? ? i++; } } synchronized synchronized doSomething(){……} //进入该方法时加锁 public synchronized void accessVal(int newVal); synchronized() { …...} //进入该代码段时加锁 synchronize

文档评论(0)

叮当文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档