- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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(
您可能关注的文档
- 《2016 High-power in-band pumped ErYAG laser at 1617 nm》.pdf
- 《2016 Improving the Lagrangian Relaxation Approach for Large Job-shop Scheduling》.pdf
- 《2016 Iterative Flattening Search for the Flexible Job Shop Scheduling Problem》.pdf
- 《2016 Job-shop scheduling with blocking and no-wait constraints 》.pdf
- 《2016 Job-shop scheduling with processing alternatives 》.pdf
- 《2016 Job-Shop调度问题的分批和最优化策略》.pdf
- 《2016 Lagrangian bounds for just-in-time job-shop scheduling 》.pdf
- 《2016 Lagrangian relaxation for complex job shop scheduling》.pdf
- 《2016 Lagrangian Relaxation Neural Networks for Job Shop Scheduling》.pdf
- 《2016 Largrangian Relaxation Neurual Networks for Job Shop Scheduling 》.pdf
- 书面表达之建议信(讲义)-中考英语一轮复习(含答案).pdf
- 中考历史复习小众题型类:填空题、改错题、判断题(70题).pdf
- 2024年吉林省县乡教师选调考试《教育学》真题汇编带解析必背【基础题】.pdf
- 2025年中考语文备考之《朝花夕拾》名著导读及考题.pdf
- 小说标题的含义和作用(模拟突破)-2025年中考语文考点突破之小说阅读(解析版).pdf
- 阅读理解之应用文(练习)-中考英语一轮复习(含答案).pdf
- 小说情节作用(模拟突破)-2025年中考语文考点突破之小说阅读(原卷版).pdf
- 小说段落作用(模拟突破)-2025年中考语文考点突破之小说阅读(解析版).pdf
- 小说段落作用(试题专练)-2025年中考语文考点突破之小说阅读(解析版).pdf
- 2025年上海市16区初三语文一模试题汇编之现代文阅读二(记叙文)学生版.pdf
文档评论(0)