上一页 1 2 3 4 5 6 ··· 27 下一页
摘要: 默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。 例: log.debug("开始运行..."); Thread t1 = new Thread(() -> { log.debug 阅读全文
posted @ 2023-06-15 20:05 |旧市拾荒| 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 1、join 方法详解 1.1 为什么需要 join? 下面的代码执行,打印 r 是什么? static int r = 0; public static void main(String[] args) throws InterruptedException { test1(); } privat 阅读全文
posted @ 2023-06-01 22:44 |旧市拾荒| 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 1、sleep 实现 在没有利用 cpu 来计算时,不要让 while(true) 空转浪费 cpu,这时可以使用 yield 或 sleep 来让出 cpu 的使用权给其他程序 while(true) { try { Thread.sleep(50); } catch (InterruptedEx 阅读全文
posted @ 2023-06-01 22:40 |旧市拾荒| 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 1、sleep 与 yield sleep 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞) 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException 睡眠结束后的线程未必会立 阅读全文
posted @ 2023-05-30 22:00 |旧市拾荒| 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 1、start 与 run 调用 run public static void main(String[] args) { Thread t1 = new Thread("t1") { @Override public void run() { log.debug(Thread.currentThr 阅读全文
posted @ 2023-05-15 19:27 |旧市拾荒| 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 常见方法 方法名 static 功能说明 注意 start() 启动一个新线程,在新的线程运行 run 方法中的代码 start 方法只是让线程进入就绪,里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的start方法只能调用一次,如果调用了多次会出现 IllegalThreadS 阅读全文
posted @ 2023-05-15 19:24 |旧市拾荒| 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 1、线程运行原理 1.1 栈与栈帧 Java Virtual Machine Stacks (Java 虚拟机栈 JVM) 我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。 每个栈由多个栈帧(Frame)组成,对应着每 阅读全文
posted @ 2023-05-05 22:15 |旧市拾荒| 阅读(353) 评论(2) 推荐(0) 编辑
摘要: 一、直接使用 Thread // 创建线程对象 Thread t = new Thread() { public void run() { // 要执行的任务 } }; // 启动线程 t.start(); 例如: // 构造方法的参数是给线程指定名字,推荐 Thread t1 = new Thre 阅读全文
posted @ 2023-04-24 22:07 |旧市拾荒| 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 1、并行 并行代表充分利用多核 cpu 的优势,提高运行效率。 想象下面的场景,执行 3 个计算,最后将计算结果汇总。 计算 1 花费 10 ms ​ 计算 2 花费 11 ms ​ 计算 3 花费 9 ms ​ 汇总需要 1 ms 如果是串行执行,那么总共花费的时间是 10 + 11 + 9 + 阅读全文
posted @ 2023-04-13 21:57 |旧市拾荒| 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 一、进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程 阅读全文
posted @ 2023-04-10 20:42 |旧市拾荒| 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 1 自定义Spring IOC总结 1.1 使用到的设计模式 工厂模式。这个使用工厂模式 + 配置文件的方式。 单例模式。Spring IOC管理的bean对象都是单例的,此处的单例不是通过构造器进行单例的控制的,而是spring框架对每一个bean只创建了一个对象。 模板方法模式。Abstract 阅读全文
posted @ 2023-04-05 20:20 |旧市拾荒| 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 3 定义解析器相关类 3.1 BeanDefinitionReader接口 BeanDefinitionReader是用来解析配置文件并在注册表中注册bean的信息。定义了两个规范: 获取注册表的功能,让外界可以通过该对象获取注册表对象。 加载配置文件,并注册bean数据。 /** * @versi 阅读全文
posted @ 2023-04-03 19:50 |旧市拾荒| 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 现要对下面的配置文件进行解析,并自定义Spring框架的IOC对涉及到的对象进行管理。 <?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="userService" class="com.itheima.service.impl.User 阅读全文
posted @ 2023-03-30 20:52 |旧市拾荒| 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 1 BeanFactory解析 Spring中Bean的创建是典型的工厂模式,这一系列的Bean工厂,即IoC容器,为开发者管理对象之间的依赖关系提供了很多便利和基础服务,在Spring中有许多IoC容器的实现供用户选择,其相互关系如下图所示。 其中,BeanFactory作为最顶层的一个接口,定义 阅读全文
posted @ 2023-03-27 19:52 |旧市拾荒| 阅读(142) 评论(0) 推荐(1) 编辑
摘要: 1 spring使用回顾 自定义spring框架前,先回顾一下spring框架的使用,从而分析spring的核心,并对核心功能进行模拟。 数据访问层。定义UserDao接口及其子实现类 public interface UserDao { public void add(); } ​ public 阅读全文
posted @ 2023-03-23 20:39 |旧市拾荒| 阅读(59) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 27 下一页