编辑
2022-12-13
学习记录
00

为什么要使用lambda表达式(函数式接口)

  • 避免匿名内部类定义过多
  • 可以让你的代码看起来更简洁
  • 保留核心的逻辑
  • 函数式接口定义:一个接口中只有唯一一个的抽象方法

lambda 表达式总结:

  • 总结lambda只能在只有一行的情况下才能简化为一行
  • 前提是接口为函数式接口
  • 多个参数,也能去掉类型,必须加上括号

编辑
2022-12-13
学习记录
00

java实现多线程的方式有三种

第一种继承thread 类,重写run方法调用

继承thread类具备多线程的能力 启动线程 子类对象.start() 不建议使用:避免面向对象单继承的局限性

第二种就是实现runnable接口

重写run方法实现 实现接口runnable具备多线程 能力 启动线程 传入目标对+threa对象.start() 推荐使用:避免单继承的局限性,灵活方便,方便同一个对象被多个线程调用

第三种就是实现callable接口

重写call方法,创建线程池,把对象加入到线程池中 启用线程,最后关闭线程池

编辑
2022-12-13
学习记录
00

提示

线程有五种状态:创建、就绪、运行、阻塞、结束

结束(stop)

//线程正常停止 //使用标志位 //不要使用stop,destroy

public class TestStop implements Runnable { private boolean flag=true; @Override public void run() { int i=0; while (flag){ System.out.println("run thread"+i++); } } public void stop(){ this.flag=false; } public static void main(String[] args) { TestStop testStop=new TestStop(); new Thread(testStop).start(); for (int i = 0; i < 1000; i++) { System.out.println("main"+i); if (i==900){ testStop.stop(); System.out.println("线程停止"); } } } }

线程休眠(sleep)

指定当前线程阻塞的毫秒数 存在异常interruptionException 时间到达后进入就绪状态 sleep模拟网络延迟

编辑
2022-12-13
学习记录
00

线程池:三大方法、七大参数、四种拒绝策略😆

池化技术

  • 程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术 线程池、连接池、内存池、对象池///..... 创建、销毁。十分浪费资源 池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。
  • 线程池的好处:
    • 1、降低资源的消耗
    • 2、提高响应的速度
    • 3、方便管理。
    • 线程复用、可以控制最大并发数、管理线程

三大方法

创建线程最好不要用executors去创建,而使用ThreadPoolExecutors创建,executors返回的线程池创建线程数和最大队列是int的最大值,可能会堆积大量的请求和线程导致oom

public class Demo01 { public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程 // ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一个固定的线程池的大小 // ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩的,遇强则强,遇弱则弱 try { for (int i = 0; i < 100; i++) { // 使用了线程池之后,使用线程池来创建线程 threadPool.execute(() -> { System.out.println(Thread.currentThread().getName() + " ok"); }); } } catch (Exception e) { e.printStackTrace(); } finally { // 线程池用完,程序结束,关闭线程池 threadPool.shutdown(); } } }
编辑
2022-12-02
学习记录
00

众所周知Oracle数据库中没用Limit关键字,那我们要实现返回某条数据怎么办呢,就之内采用Rownum关键字

比如现在我要升序排列,返回最后一条数据 如果是mysql的话就可以这样写

select t.* from emr_mrhp.mrhp_log_message t where t.app_no='MRHP_HOME' and t.inp_visit_id='R10005901' order by t.create_date desc limit 1;

在oracle可以先查出排好序的列表,当成一个新表,再通过rownum来限制,如

select * from (select t.* from emr_mrhp.mrhp_log_message t where t.app_no='MRHP_HOME' and t.inp_visit_id='R10005901' order by t.create_date desc) where rownum=1;

这样就实现同样的效果