Java中的同步synchronized

本文详细介绍了Java中的同步机制,包括synchronized关键字的两种使用方法及其注意事项。解释了如何通过synchronized实现方法级的同步,以及如何使用synchronized块对特定代码段进行同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:[url]http://developer.51cto.com/art/200906/132354.htm[/url]
[url]http://developer.51cto.com/art/200906/132360.htm[/url]
第一种:
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块同步类方法时应注意。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值