java synchronized总结

一句话总结:

每个类,每个对象都有一个锁,当在方法或者代码块中添加了synchronized关键字时,要访问这个方法或者这个代码块时就需要获取对应的锁,没有添加synchronized则不受影响。


举例说明:

1、举例的类

package com.sync;

public class TestSync {

private Object lock = new Object();

public synchronized void doMethodA() {
   System.out.println("start method A..");
   for (int i = 0; i < 10; i++) {
        System.out.println("A:" + i);
    }
    System.out.println("finish method A..");
}

public void doMethodB() {
    System.out.println("start method B..");
synchronized (this) {
for (int i = 0; i < 10; i++) {
System.out.println("B:" + i);
}
}
System.out.println("finish method B..");
}
public static synchronized void doMethodC() {
System.out.println("start method C..");
for (int i = 0; i < 10; i++) {
System.out.println("C:" + i);
}
System.out.println("finish method C..");
}
public void doMethodD() {
System.out.println("start method D..");
synchronized (TestSync.class) {
for (int i = 0; i < 10; i++) {
System.out.println("D:" + i);
}
}
System.out.println("finish method D..");
}


public void doMethodE() {
System.out.println("start method E..");
synchronized (lock) {
for (int i = 0; i < 10; i++) {
System.out.println("E:" + i);
}
}
System.out.println("finish method E..");
}


public void doMethodF() {
System.out.println("start method F..");
synchronized (lock) {
for (int i = 0; i < 10; i++) {
System.out.println("F:" + i);
}
}
System.out.println("finish method F..");
}


public void doMethodG() {
System.out.println("start method G..");
for (int i = 0; i < 10; i++) {
System.out.println("G:" + i);
}
System.out.println("finish method G..");
}
}


1、给类实例添加synchronized


方法doMethodA()与doMethodB就是给类实例添加了synchronized,它们是互斥的,同一时间只能执行doMethodA()方法或者doMethodB方法中的代码块


2、给类对象与类添加synchronized

方法doMethodA()与方法doMethodC()一个是对类实例同步,一个是对类同步,它们将不是互斥的,可以同时执行


3、给类添加synchronized

方法doMethodC()与方法doMethodD(),它们是互斥的,同一时间只能执行doMethodC()方法或者doMethodD方法中的代码块


4、对其他类对象添加synchronized

方法doMethodE()与方法doMethodF()是互斥的,因为他们使用同一个类对象实例


5、方法doMethodE()不会跟doMethodA、doMethodB、doMethodC、doMethodD互斥


6、方法doMethodG()不会跟doMethodA、doMethodB、doMethodC、doMethodD、doMethodE互斥,它不需要锁




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风中情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值