- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《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
- 《2016景观照明设计研讨会》.pdf
- 《2016流行的几款LED显示屏配图详解》.doc
- 《2016版Oeko_Tex和2016版Eco_Label标签标准》.pdf
- 《2016秋季Java程序设计期末考试试卷_A卷_》.doc
- 《2016级经贸英语 lesson 4 Remittance》.ppt
- 《2016股市技术分析、K线分析入门》.ppt
- 《2016薪酬调查报告Job88_2016》.pdf
- 《2016软件大赛JAVA试题》.doc
- 《2016高考英语一轮限时特训:4-2 Working the land(人教版)》.doc
- 《209. MABEL COLLINS - Light on the Path》.doc
文档评论(0)