synchronized方法测试并行
判断线程先进行哪个方法?
先调用sendsms()方法,然后call()。如果让sendsms方法停止几秒,结果仍是一样。原因:由于被synchonized修饰了方法。锁会锁方法的调用者对象,而我们初始化是同一个对象。所以就用同一把锁,所以谁先拿到谁先执行。
判断线程先进行哪个方法?
显然hello方法先执行,因为它没用synchronized修饰。
判断线程先进行哪个方法?
调用者有两个对象,有两把锁。但由于sendSms()方法延迟了,所以先打印call()方法。
同步方法前加了静态方法
判断线程先进行哪个方法?
static类一加载就有了。类全局唯一。于是锁了类,于是两个方法也用的同一个锁。所以在延迟几秒后执行先发短信,再打电话。
如果这个初始化两个对象(person),结果仍然会是这样。因为它锁的是类!把person类锁了!
如果初始化一个对象,但是一个静态同步方法,一个不是静态同步方法而是普通的同步方法。打电话方法先执行,然后再发短信方法。一个是锁的类,一个锁的方法调用者。所以先打电话方法。
如果初始化两个对象,但是一个静态同步方法,一个不是静态同步方法而是普通的同步方法。打电话方法先执行,然后再发短信方法。一个是锁的类,一个锁的方法调用者。所以先打电话方法。