zoukankan      html  css  js  c++  java
  • 奇奇怪怪

    20210201记录

    遇到一个加锁的问题 如下例子

    public class Juc7 {
        public static void main(String[] args) {
            String strtest="test";
    //分别new2个SynStr对象的线程调用方法
            new Thread(()->{
                new SynStr(strtest).test();
            }).start();
            new Thread(()->{
                new SynStr(strtest).test();
            }).start();
        }
    }
    
    
    class SynStr{
        String strtest;
        public SynStr(String strtest) {
            this.strtest = strtest;
        }
        public void test()  {
            synchronized (strtest){    //对String类型加锁 锁定代码块        
          System.out.println(Thread.currentThread().getName()+"休眠前");
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }            System.out.println(Thread.currentThread().getName()+"休眠后");
            }
        }
    }
    代码分析:
    这里2个线程 分别new了SynStr对象调用方法
    synchronized锁定了字符串
    按一般情况来说这2个线程是对不同的字符串加锁 因为new 不是同一个对象
    所以输出应该是2个线程同时打印"休眠前" 2s后再同时打印"休眠后"
    
    但实际情况是其中一条线程先打印"休眠前" 2s后"休眠后" 后一条线程继续走
    
    查资料没找到答案 听说是因为string存在常量池中 不同对象中synchronized锁定的字符串也是同一个 
    遇到问题随时记录

    20210318记录

    今天回想以前遇到的问题 项目中监听跑线程 new Thread(new xc()).start(); xc的类实现runable 

    因为new了所以不会被spring管理到 那时候我是用webcontent.getbean()的手动注入解决这个问题的

    现在想到如果我用new Thread(->{})的方式能不能解决注入的问题呢

    先来注入失败的demo

    //BrandServiceImpl中实现了Runnable
    new Thread(new BrandServiceImpl()).start();
    
    //很显然会报错 注入失败导致的空指针异常
    Exception in thread "Thread-35" 
    java.lang.NullPointerException

    用lambda

    // controller中加上代码 brandService中有注入dao类
            new Thread(()->{
                log.info("进入线程");
                BrandEntity getentiy = brandService.getentiy();
                log.info("---------------"+JSON.toJSONString(getentiy));
            }).start();
    //成功打印了getentiy

    既然用lambda能成功 那么new runable肯定也能成功 试下

            new Thread(new Runnable() {
                @Override
                public void run() {
                    BrandEntity getentiy = brandService.getentiy();
                    log.info("new runable---------------"+JSON.toJSONString(getentiy));
                }
            }).start();
    //成功打印
    //new runable---------------{"brandId":3,"descript":"小米","firstLetter":"m","

     继续思考

    既然spring不管理new对象 那么我把实例化都交给spring去处理好了 对上面空指针异常的例子做修改

    //ZThread类是实现了Runnable 再给加上@Component注解
    @Autowired
        ZThread zThread;
    
    new Thread(zThread).start();
    //成功打印
    
    //注意:单例模式多线程中成员变量是共享的 不想共享应使用ThreadLocal

    20210412记录

    今天在测试微服务项目中 删除了一个module 重新再创建一个相同名称的module时 发现目录文件全部都是灰色的

    手动配置Sources Resources等目录后 打开主入口文件 出现报错 Cannot resolve symbol 'SpringApplication'

    Cannot access org.springframework.context.ConfigurableApplicationContext

    按网上解决方案刷新maven解决不了

    思考是否是因为原module删除后一些注册文件没删除干净

      测试:先新建一个名为test的module 发现这个module正常

        再删除module后重新创建同名module 还是出现了这个问题

      后查idea的配置文件在哪 在.idea/misc.xml中的

        <option name="ignoredFiles">
          <set>
            <option value="$PROJECT_DIR$/gulimail-search/pom.xml" />
          </set>
        </option>

    把上述文件内容指定的module名删除后重启 删除异常module后新建module 恢复正常

    20210518记录

    今天在练习io流时发现了一个问题 反复测试找没解决 记录下该问题

        public static void getprofile(){
            try {
                FileInputStream fs = new FileInputStream("C:\Users\HB\Desktop\test1.properties");
    //            BufferedInputStream bs = new BufferedInputStream(fs);
    //            int count;
    //            byte[] b = new byte[1024];
    //            while ((count=bs.read(b))!=-1){
    //                System.out.print(new String(b,0,count));
    //            }
                Properties ps = new Properties();
                ps.load(fs);
                System.out.println(ps.getProperty("key"));
            }catch (IOException e){
                e.printStackTrace();
            }
        }

    上述简化的测试代码 流未关啥的先忽略掉 代码作用就是打印properties配置文件中的某个值

    刚开始测试时以上代码注释是打开的 打印key为null 开始排查出现的原因

    1.修改了配置文件编码为utf-8无dom 新建配置文件 2.打断点查fs是否为空 发现正常 3.可能手动生成的properties某方面有问题 Property.store()来生成文件

    上述方法均失败了 后把上面的代码去注释后成功打印key值

    不知道原因 记下这个问题

     

  • 相关阅读:
    android的消息处理机制 Looper,Handler,Message
    AndroidManifest.xml 文件
    漫谈数据库索引 | 脚印 footprint(转载)
    Progress Indication while Uploading/Downloading Files using WCF(WCF制作带进度条的上传/下载)(转载)
    (转)ADO.net,Linq to SQL和Entity Framework性能实测分析
    Silverlight使用webClient上传下载
    RIA Services Staying Logged In (Ria Service持久登陆,sessioncookie,notcookie)
    OpenGL中的glLoadIdentity、glTranslatef、glRotatef原理
    Microsoft .NET 中的简化加密(转)
    Fluent API for .NET RIA Services Metadata(Reproduced)
  • 原文地址:https://www.cnblogs.com/hbhb/p/14359030.html
Copyright © 2011-2022 走看看