JavaThread多线程同步锁通信.doc

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

Java Thread 多线程同步、锁、通信 线程同步、同步锁、死锁 线程通信 线程组和未处理异常 Callable和Future 12、线程同步 当多个线程访问同一个数据时,非常容易出现线程安全问题。这时候就需要用线程同步 Case:银行取钱问题,有以下步骤: A、用户输入账户、密码,系统判断是否登录成功 B、用户输入取款金额 C、系统判断取款金额是否大于现有金额 D、如果金额大于取款金额,就成功,否则提示小于余额 ? 现在模拟2个人同时对一个账户取款,多线程操作就会出现问题。这时候需要同步才行; 同步代码块: synchronized (object) { //同步代码 } Java多线程支持方法同步,方法同步只需用用synchronized来修饰方法即可,那么这个方法就是同步方法了。 对于同步方法而言,无需显示指定同步监视器,同步方法监视器就是本身this 同步方法: public synchronized void editByThread() { //doSomething } ? 需要用同步方法的类具有以下特征: A、该类的对象可以被多个线程访问 B、每个线程调用对象的任意都可以正常的结束,返回正常结果 C、每个线程调用对象的任意方法后,该对象状态保持合理状态 不可变类总是线程安全的,因为它的对象状态是不可改变的,但可变类对象需要额外的方法来保证线程安全。 例如Account就是一个可变类,它的money就是可变的,当2个线程同时修改money时,程序就会出现异常或错误。 所以要对Account设置为线程安全的,那么就需要用到同步synchronized关键字。 下面的方法用synchronized同步关键字修饰,那么这个方法就是一个同步的方法。这样就只能有一个线程可以访问这个方法, 在当前线程调用这个方法时,此方法是被锁状态,同步监视器是this。只有当此方法修改完毕后其他线程才能调用此方法。 这样就可以保证线程的安全,处理多线程并发取钱的的安全问题。 public synchronized void drawMoney(double money) { //取钱操作 } 注意:synchronized可以修饰方法、代码块,但不能修饰属性、构造方法 可变类的线程安全是以降低程序的运行效率为代价,为了减少线程安全所带来的负面影响,可以采用以下策略: A、不要对线程安全类的所有方法都采用同步模式,只对那些会改变竞争资源(共享资源)的方法进行同步。 B、如果可变类有2中运行环境:单线程环境和多线程环境,则应该为该可变提供2种版本;线程安全的和非线程安全的版本。 在单线程下采用非线程安全的提高运行效率保证性能,在多线程环境下采用线程安全的控制安全性问题。 释放同步监视器的锁定 任何线程进入同步代码块、同步方法之前,必须先获得对同步监视器的锁定,那么何时会释放对同步监视器锁定? 程序无法显示的释放对同步监视器的锁定,线程可以通过以下方式释放锁定: A、当线程的同步方法、同步代码库执行结束,就可以释放同步监视器 B、当线程在同步代码库、方法中遇到break、return终止代码的运行,也可释放 C、当线程在同步代码库、同步方法中遇到未处理的Error、Exception,导致该代码结束也可释放同步监视器 D、当线程在同步代码库、同步方法中,程序执行了同步监视器对象的wait方法,导致方法暂停,释放同步监视器 ? 下面情况不会释放同步监视器: A、当线程在执行同步代码库、同步方法时,程序调用了Thread.sleep()/Thread.yield()方法来暂停当前程序,当前程序不会释放同步监视器 B、当线程在执行同步代码库、同步方法时,其他线程调用了该线程的suspend方法将该线程挂起,该线程不会释放同步监视器。注意尽量避免使用suspend、resume 同步锁(Lock) 通常认为:Lock提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock更灵活的结构,有很大的差别,并且可以支持多个Condition对象 Lock是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,

文档评论(0)

liudao + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档