iyuks 2021-08-09 11:31 采纳率: 86.2%
浏览 1193
已结题

Controller方法加了synchronized , service的方法就不用加synchronized 了吧?

Controller方法加了synchronized , service的方法就不用加synchronized 了吧?假如说这个service只有这一个Controller调用。

这样就能做到只有一个线程访问,对吗?

  • 写回答

6条回答 默认 最新

  • 山河已无恙 云原生领域优质创作者 2021-08-09 11:53
    关注

    嗯,个人感觉加在 service 要好一点,因为串行化的代码变短了。而且处理逻辑的也是在service。加到入口,那么controller,service线程都是串行的,类比HashmapCounrrentHashmapCounrrentHashmap里面有个分段锁,就是为了缩短synchronized修饰的区域。

    可以对比这两种单例的写法:

    • 懒汉式加同步方法

      public class Singleton {
        // 实例变量
        private byte[] bate = new byte[1024];
        // 私有的构造函数,即不允许外部 new
        private Singleton(){ }
      
        private static  Singleton singleton =null;
        public static synchronized Singleton getInstance0(){
            if (singleton == null) {
                singleton = new Singleton();
            }
            return singleton;
        }
      
    • 双重效验锁单例

      public class Singleton {
        // 实例变量
        private byte[] bate = new byte[1024];
        // 私有的构造函数,即不允许外部 new
        private Singleton(){ }
      
        private  static volatile Singleton singleton2 = null;
        public static Singleton getInstance4() {
      
            if (singleton2 == null){
                synchronized (Singleton.class){
                    if (singleton2 ==null){
                        singleton2 = new Singleton();
                    }
                }
            }
            return singleton2;
        }
      
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 修改了问题 8月9日
  • 创建了问题 8月9日

悬赏问题

  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测