为什么需要 Lock synchronized 不够用。 效率低:锁的释放情况少、试图获取锁时不能设定超时、不能中断一个正在试图获得锁的线程。 不够灵活:加锁和释放的时机单一...
为什么需要 Lock synchronized 不够用。 效率低:锁的释放情况少、试图获取锁时不能设定超时、不能中断一个正在试图获得锁的线程。 不够灵活:加锁和释放的时机单一...
级别什么时候使用数值DEBUG详细信息,一般只在调试问题时使用。10INFO证明事情按预期工作。20WARNING某些没有预料到的事件的提示,或者在将来可能会出现的问题提示。...
重排序 代码实际执行顺序和代码在 Java 文件中的顺序不一致,代码指令并不是严格按照代码语句顺序执行的,这就是重排序。 重排序的好处:提高处理速度 重排序前:代码: 指令:...
是什么? volatile 是一种同步机制,比 synchronized 或者 Lock 相关类更轻量,因为 volatile 并不会发生上下文切换 等开销很大的行为。 如果...
整体上 JVM 内存结构:和 Java 虚拟机运行时区域有关。 Java 内存模型:和 Java 的并发编程有关。 Java 对象模型:和 Java 对象在虚拟机中的表现形式...
方法一(不推荐):在子线程中捕捉。 方法二(推荐):使用 UncaughtExceptionHandler UncaughtExceptionHandler 配置 uncau...
开发人员难以控制的异常 所有继承的 Error 的异常开发人员都难以控制,比如 OOM(内存越界)。当这些异常发生的时候,往往要对代码进行优化。牵一发动全身,所以这些异常难以...
原则 使用 interrupt 来通知,而不是强制。 需要停止的线程可能不是别人写的程序,正确的做法是通知别人停下来,而不是强制。因为别人是线程的开发者,他自己更清楚线程里做...
JUC 已经提供了一些现成的线程池给开发者使用,但是这些线程池或多或少不能满足具体的业务开发需求,所以在使用线程池的时候,大多是自己创建。 JUC 提供的线程池 newSin...
典型场景一: 每个线程需要一个独享的对象(通常是工具类,典型的类有 SimpleDateFormat 和 Random) 代码示例: 典型场景二: 每个线程内需要保存全局变量...
线程的六种状态: New Runnable Blocked Waiting Timed Waiting Terminated 状态之间的关系如下: 验证 首先验证 New,R...
spring 中的事务使用起来很简单,只需要在需要使用事务的方法上加上 Transactional 注解就好了。这个注解是有一个 Propagation 的参数。这个参数有默...
Java 创建新线程有很多种方式,归根到底只有一种方式。实现 Thread 的 run 方法。 方式1、通过 Runnable 方式实现 方式2、通过 Thread 方式实现...
maven 聚合工程是使用 maven 将多个工程打包,工程之间可以互相依赖,多个工程的公共依赖库可以在父工程中统一引入。 1、新建一个空的 maven 工程 不需要 src...
1. 修改 /etc/profile 增加 tomcat 环境变量 然后执行 source /etc/profile 使配置文件生效 2. 修改 tomcat 配置 第一个 ...
分组数据 数据分组 分组是在SELECT语句的GROUP BY子句中建立的。 GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套, 为数据分组提供更细致的控制。...
jdbcTypejavaTypeCHARStringVARCHARStringLONGVARCHARStringNUMERICjava.math.BigDecimalDECI...
异常处理 Exception 和 Error 都继承 Throwable 。只有 Throwable 类的对象才能被抛出(throw)或者捕获(catch)。 Throwa...
实际的项目环境: 本地开发环境(Local) 开发环境(Dev) 测试环境(Beta) 线上环境(Prod) 环境隔离的目的: 生产环境与其他环境的 DB、MQ、Redis、...