文章目录
使用场景
public synchronized void test2(){
log.info("实例方法");
}
public synchronized static void test3(){
log.info("静态方法");
}
public void test4(){
log.info("代码块");
}
引出两个小问题:
一个类中同时有synchronized static方法和synchronized的方法,这两个方法同步吗?
不同步
- 静态方法与成员方法的区别是,静态方法归属类,成员方法归属于对象
- synchronized方法锁定的是当前对象
- 如果是静态同步方法,锁定的是类的Class对象。注意这里不是锁定此类的所有对象,仅是唯一的Class对象。
- 如果是普通同步方法,锁定的是调用该方法的那个对象。
下面是我之前测试的代码,如果两个方法是同步的话,结果应该是一个线程锁定对象循环输出完释放对象后,另一个线程再循环输出,但实际上是两个线程交替执行的,所以这两个方法不同步。
public class Test {
public static void main(String[] args) {
Test test=new Test();
test.new T1().start();
test.new T2().start();
}
public synchronized static void func1() {
for(int i=0;i<1000;i++) {
System.out.println("this is a synchronized static method");
}
}
public synchronized void func2() {
for(int i