网站大量收购闲置独家精品文档,联系QQ:2885784924

《2016年计算机二级Java多线程入门技巧(3-4)》.doc

《2016年计算机二级Java多线程入门技巧(3-4)》.doc

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

2012年计算机二级Java多线程入门技巧(3-4) 来源: :91UP快学堂 时间:2012/7/31  使用Synchronized关键字同步类方法   要想解决脏数据的问题,最简单的方法就是使用synchronized关键字来使run方法同步,代码如下public synchronized void run()   2.{   3.   4.}   从上面的代码可以看出,只要在void和public之间加上synchronized关键字,就可以使run方法同步,也就是说,对于同一个Java类的对象实例,run方法同时只能被一个线程调用,并当前的run执行完后,才能被其他的线程调用。即使当前线程执行到了run方法中的yield方法,也只是暂停了一下。由于其他线程无法执行run方法,因此,最终还是会由当前的线程来继续执行。先看看下面的代码:   sychronized关键字只和一个对象实例绑定   5.class Test   6.{   7. public synchronized void method()   8. {   9.   10. }   11.}   12.   13.public class Sync implements Runnable   14.{   15. private Test test;   16. public void run()   17. {   18. test.method();   19. }   20. public Sync(Test test)   21. {   22. this.test = test;   23. }   24. public static void main(String[] args) throws Exception   25. {   26. Test test1 = new Test();   27. Test test2 = new Test();   28. Sync sync1 = new Sync(test1);   29. Sync sync2 = new Sync(test2);   30. new Thread(sync1)。start();   31. new Thread(sync2)。start();   32. }   33. } 在Test类中的method方法是同步的。但上面的代码建立了两个Test类的实例,因此,test1和test2的method方法是分别执行的。要想让method同步,必须在建立Sync类的实例时向它的构造方法中传入同一个Test类的实例,如下面的代码所示:   Sync sync1 = new Sync(test1); 不仅可以使用synchronized来同步非静态方法,也可以使用synchronized来同步静态方法。如可以按如下方式来定义method方法:   34.class Test   35.{   36. public static synchronized void method() { }   37.}   建立Test类的对象实例如下:   38.Test test = new Test();   对于静态方法来说,只要加上了synchronized关键字,这个方法就是同步的,无论是使用test.method(),还是使用Test.method()来调用method方法,method都是同步的,并不存在非静态方法的多个实例的问题。   在23种设计模式中的单件(Singleton)模式如果按传统的方法设计,也是线程不安全的,下面的代码是一个线程不安全的单件模式。   39.package test;   40.   41.// 线程安全的Singleton模式   42.class Singleton   43.{   44. private static Singleton sample;   45.   46. private Singleton()   47. {   48. }   49. public static Singleton getInstance()   50. {   51. if (sample == null)   52. {   53. Thread.yield(); // 为了放大Singleton模式的线程不安全性   54. sample = new Singleton();   55. }   56. return sample;   57. }   58.}   59.public class MyThread extends Thread   60.{   61. public void run(

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档