【强制】高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能 锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。
说明:尽可能使加锁的代码块工作量尽可能的小,避免在锁代码块中调用 RPC方法。
代码实例
package aaa;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
/**
* 1.一个对象里面如果有多个synchronized方法
*
*
*
*/
class Phone{
public synchronized void sendEmail() throws InterruptedException {
TimeUnit.MILLISECONDS.sleep(200);
System.out.println("----------------sendEmail");
}
public synchronized void senSMS(){
System.out.println("---------------sendSms");
}
public void hello(){
System.out.println("-------------------hello");
}
}
public class Lock8 {
public static void main(String[] args) throws InterruptedException {
Phone phone = new Phone();
new Thread(()->{
try {
phone.sendEmail();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"s").start();
TimeUnit.MILLISECONDS.sleep(200);
new Thread(()->{
phone.senSMS();
},"sb").start();
}
}
public static synchronized void sendEmail() throws InterruptedException { TimeUnit.MILLISECONDS.sleep(200); System.out.println("----------------sendEmail"); }
代码解读:
锁的是类对象本身,就是唯一模板class
public synchronized void senSMS(){ System.out.println("---------------sendSms"); }
代码解读
锁的是实例对象本身,就是new出来的具体实例对象本身