美文网首页
常用 java 笔记

常用 java 笔记

作者: Uning | 来源:发表于2019-09-30 18:16 被阅读0次

    notes
    注解@JsonIgnore的使用方法及其效果
    使用方法:一般标记在属性或者方法上,返回的json数据即不包含该属性。

            @JsonIgnore
            @Column(name = "hobbies")
            private String hobbies;
    
    注解@JsonProperty的使用方法及其效果
        @JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称
            @JsonProperty("rid")
            @Column(name = "dealerscode")
            private int code;
            
    注解@Builder的使用方法及其效果
        @Builder声明实体,表示可以进行Builder方式初始化
        UserInfo userInfo = userInfo.toBuilder()
            .name("OK")
            .email("zgood@sina.com")
            .build();
        
        配合这两注解一起使用
            @NoArgsConstructor  
                可以 new 对象或者说有初始构造函数
            @AllArgsConstructor 
                不会出现bug 参数列表和形式参数列表长度不同
        
    注解@Primary可以标记哪个bean是默认使用的,也就是说是@Autowired自动导入的bean
    
    AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。主要用于在高并发环境下的高效程序处理,来帮助我们简化同步处理.原子性操作
        public final int get() //获取当前的值
        public final int getAndSet(int newValue)//获取当前的值,并设置新的值
        public final int getAndIncrement()//获取当前的值,并自增
        public final int getAndDecrement() //获取当前的值,并自减
        public final int getAndAdd(int delta)  //获取当前的值,并加上预期的值
        //使用原子操作值增长时比使用 ReentrantLock 效率更高  但是如果把值从0循环加1到1亿时 比加锁占用资源更多
        
        
    公平锁 如果获取锁成功则堵塞,后续排队获取
    
    非公平锁 无视队列直接尝试获取锁
    即便是公平锁,如果通过不带超时时间限制的tryLock()的方式获取锁的话,它也是不公平的,因为其内部调用的是sync.nonfairTryAcquire()方法,无论抢到与否,都会同步返回。
    
    java内置锁
        synchronized
            特点:简单
    显式锁
        ReentrantLock
            特点:可重入、可中断、可限时、公平锁
        使用显式锁一定要手动释放,如果获取锁后由于异常的原因没有释放锁,那么这把锁将永远得不到释放!所以要将unlock()放在finally块
        
    Future
        Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。
            cancel方法用来取消任务
            isDone方法表示任务是否已经完成,若任务完成,则返回true;
            ...
        
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(8);   //线程池大小
        scheduler.setAwaitTerminationSeconds(5);
        scheduler.initialize();
        
        Future gameFlowFuture = scheduler.submit(() -> {
            try {
                waitBetting();
                Thread.sleep(2000);
                deal();
                Thread.sleep(1000);
                doBeforeRoundEnd();
            } catch (InterruptedException e) {
                log.error(ExceptionUtils.getStackTrace(e));
            }
        });
        
        
    Java 双冒号用法
        java.util.List<String> list = new ArrayList<String>();
        list.add("121");
        list.add("231");
    
        for (String n : list) {
            System.out.println(n); 
        }
    
        list.forEach(n -> System.out.println(n));
    
        list.forEach(System.out::println);      
        
        //调用方法
        for(GameListener onRoundEnd : gameListeners){
            scheduler.execute(new Runnable() {
                @Override
                public void run() {
                    onRoundEnd.onRoundEnd();
                }
            });
        }
    
        gameListeners.forEach(gameListener -> scheduler.execute(gameListener::onRoundEnd));
        
        
    JAVA 函数式编程
        传统方式
            new Thread(new Runnable() {
                public void run() {
                    System.out.println("Hello World!");
                }
            }).start();
              
        函数
            new Thread(() -> System.out.println("Hello World!")).start();
        
        
    多线程简洁语法
        //开启8个线程 使用线程池
        List<Integer> testList = Arrays.asList(1,2,3,4,1,2,3,4);
    
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(8);
        scheduler.setAwaitTerminationSeconds(60);
        scheduler.initialize();
    
        final AtomicInteger testNum = new AtomicInteger(0);
    
        testList.forEach(b -> scheduler.execute(() -> {
            try {
                for(int k=0;k<1000;k++){
                    testNum.addAndGet(1);
                }
                System.out.println(Thread.currentThread().getName() + " ms:" + System.currentTimeMillis() + " num:" + testNum.get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }));
        
        //显式创建
        final AtomicInteger testNum = new AtomicInteger(0);
    
        for (int i = 0; i < 8; i++) {
            new Thread(() -> {
                try {
                    for (int k = 0; k < 1000; k++) {
                        testNum.addAndGet(1);
                    }
                    System.out.println(Thread.currentThread().getName() + " ms:" + System.currentTimeMillis() + " num:" + testNum.get());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }).start();
        }
        
        
    
    结束当前正在运行中的java虚拟机
        System.exit(0)是将你的整个虚拟机里的内容都停掉了,无论如何,内存都释放了!也就是说连JVM都关闭了,内存里根本不可能还有什么东西
        System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序
    
    Idea 修改 Git userName
        idea中git工具的用户名修改
    
        在 Terminal 中输入git config user.name获取当前的用户名
    
        修改用户名输入git config --global user.name 用户名
    
        完成修改
        
    java 8 Optional返回筛选后的值 or 对象
        List<String> mapperList = new ArrayList<>();
        mapperList.add("baccarat");
        mapperList.add("dragontiger");
        mapperList.add("fantan");
        
        String sd = mapperList.stream()
                .filter("fantan"::equals)
                .findFirst()
                .orElseGet(String::new);
                
                or 对象
                
                .get()
                
                
    Base64 加解密
        //转码
        System.out.println(new sun.misc.BASE64Encoder().encode("666666".getBytes()));
        //解码
        BASE64Decoder decoder = new BASE64Decoder();
        System.out.println(new String(decoder.decodeBuffer("NjY2NjY2")));

    相关文章

      网友评论

          本文标题:常用 java 笔记

          本文链接:https://www.haomeiwen.com/subject/slxfuctx.html