参考:
http://developer.51cto.com/art/200906/132354.htm
http://developer.51cto.com/art/200906/132360.htm
第一种:
sychronized关键字只和一个对象实例绑定
1. class Test
2. {
3. public synchronized void method()
4. {
5.
6. }
7. }
8.
9. public class Sync implements Runnable
10. {
11. private Test test;
12. public void run()
13. {
14. test.method();
15. }
16. public Sync(Test test)
17. {
18. this.test = test;
19. }
20. public static void main(String[] args) throws Exception
21. {
22. Test test1 = new Test();
23. Test test2 = new Test();
24. Sync sync1 = new Sync(test1);
25. Sync sync2 = new Sync(test2);
26. new Thread(sync1).start();
27. new Thread(sync2).start();
28. }
29. }
在Test类中的method方法是同步的。但上面的代码建立了两个Test类的实例,因此,test1和test2的method方法是分别执行的。要想让method同步,必须在建立Sync类的实例时向它的构造方法中传入同一个Test类的实例,如下面的代码所示:
Sync sync1 = new Sync(test1); 不仅可以使用synchronized来同步非静态方法,也可以使用synchronized来同步静态方法。如可以按如下方式来定义method方法:
1. class Test
2. {
3. public static synchronized void method() { }
4. }
建立Test类的对象实例如下:
1. Test test = new Test();
对于静态方法来说,只要加上了synchronized关键字,这个方法就是同步的,无论是使用test.method(),还是使用Test.method()来调用method方法,method都是同步的,并不存在非静态方法的多个实例的问题
在使用synchronized关键字时有以下四点需要注意:
1. synchronized关键字不能继承。
2. 在定义接口方法时不能使用synchronized关键字。
3. 构造方法不能使用synchronized关键字,但可以使用下节要讨论的synchronized块来进行同步。
4. synchronized可以自由放置。但要注意,synchronized不能放在方法返回类型的后面
大量使用synchronized关键字会造成不必要的资源消耗以及性能损失。
synchronized关键字有两种用法。第一种就是在上面讲的直接用在方法的定义中。另外一种就是synchronized块。我们不仅可以通过synchronized块来同步一个对象变量。也可以使用synchronized块来同步类中的静态方法和非静态方法。
注意:在使用synchronized块同步类方法时,非静态方法可以使用this来同步,而静态方法必须使用Class对象来同步。它们互不影响。当然,也可以在非静态方法中使用Class对象来同步静态方法。但在静态方法中不能使用this来同步非静态方法。这一点在使用synchronized块同步类方法时应注意。
分享到:
相关推荐
java同步synchronized关键字用法示例
Java中的synchronized:同步方法与线程安全
Java线程及同步(synchronized)样例代码
主要介绍了Java 同步锁(synchronized)详解及实例的相关资料,需要的朋友可以参考下
java的线程同步机制synchronized关键字的理解_.docx
线程同步(synchronized)1---马克-to-win java视频 java视频
基于Java synchronized同步锁实现线程交互.pdf
线程同步Synchronized,监视器monitor和锁lock的关系2---马克-to-win java视频
synchronized同步锁(悲观锁)2.1 synchronized 作用范围2.2 synchronized 核心组件2.3 synchronized 实现 1. Java锁的种类 1.1 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低。 每次去拿...
synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果 再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class ...
NULL 博文链接:https://wuaner.iteye.com/blog/998696
Java 对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized 关键 字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对synchronized 关键字 的作用进行深入了解才可定论。 总的说来,...
线程同步Synchronized,监视器monitor和锁lock的关系2---马克-to-win java视频
java多线程下wait和notify的作用
主要介绍了Java中使用synchronized关键字实现简单同步操作示例,本文起讲解了synchronized修饰函数、synchronized修饰代码块、synchronized修饰静态方法等内容,需要的朋友可以参考下
同步的概念: 同步分为同步方法和同步块两种... 无论你将Synchronized加在方法前还是加在一个变量前,其锁定的都是一个 类对象。每一个对象都只有一个锁与之相关联。 下例中分情况的列举各种情况下的同步效果
线程同步Synchronized,监视器monitor和锁lock的关系1---马克-to-win java视频
主要介绍了 java中synchronized(同步代码块和同步方法)详解及区别的相关资料,需要的朋友可以参考下
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。