JAVA
关于java的学习内容,欢迎交流
GravityQ
小码男
展开
-
redis的发布订阅功能实现刷新本地缓存
一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式。利用redis这两种场景的消息队列都能够实现。定义: 生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有。(pop操作) 发布者订阅者模式:发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情况下每个消费者收到的消息应该都是一样的。在分布式服务环境下,需要更新各服务的本地缓存使用发布订阅模式。springbo原创 2021-01-27 15:29:07 · 1240 阅读 · 0 评论 -
为什么integer比较一定要用equels
public static void main(String[] args) { Integer a = null; System.out.println(1 == a); System.out.println(a == 1); }这段代码第一次打印就会报错,是因为integer类型会自动拆箱。正确方法应该是 public static void main(String[] args) { Integer a = null;原创 2020-12-02 01:33:24 · 318 阅读 · 0 评论 -
spring 缓存
https://www.cnblogs.com/fashflying/p/6908028.html转载 2018-08-20 19:19:41 · 211 阅读 · 0 评论 -
java注解
元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。 元标签有 @Retention、@Documented、@Target、@Inherited、@Repeatable 5 种。@Retention英文意为保留期的意思。当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间。它的取值如下: Retention...转载 2018-07-17 11:14:23 · 392 阅读 · 0 评论 -
java多线程中ThreadPoolExecutor线程池参数理解
工作中使用Executors.newFixedThreadPool(n)创建线程池时,阿里巴巴java开发手册提示要手动创建线程池.提示信息是;更加明确理程池运行规则,规避资源耗尽风险。手动创建线程池的一种方式:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,...原创 2018-06-01 17:12:15 · 598 阅读 · 0 评论 -
菜鸟教程---Regex正则表达式总结
\ 将下一个字符标记为一个特殊的字符、一个原义字符、一个向后引用或一个转义字符。如,n匹配字符n,\n匹配一个换行符,序列\匹配,()匹配().^ 匹配字符串的开始位置。Multiline属性,^也匹配\n或\r后的位置列表内容...原创 2018-05-31 16:23:24 · 777 阅读 · 0 评论 -
Java内存模型
程序计数器当前线程的所执行的字节码的行号指示器java虚拟机栈线程私有,描述的事java方法执行的内存模型。每个方法在执行的同时会创建一份栈帧由于存储局部变量表(编译器可知的基本数据类型和对象引用)、操作数栈、动态链接、方法出口信息等。本地方法栈与java虚拟机栈类似,不过它是为虚拟机使用到的Native方法服务。java堆是被所有线程共享的一块区域,在虚拟机启动时创建,此内...原创 2018-06-02 16:45:54 · 188 阅读 · 0 评论 -
IDEA破解
遍历集合时若直接声明集合等于一个查询的结果,当查询的结果为空时,则容易出现空指针异常。遍历集合时就要判断集合是否为空。最好先创建一个集合再将...原创 2018-05-08 10:36:56 · 310 阅读 · 0 评论 -
类型转换异常
maxPage = Integer.parseInt((String)pInfo.get(“maxPage”)); pInfo中存储的数据类型为object,可能为integer或者为string,所以会发生integer转换string异常,此时调用integer的toString方法可解决,因为toString是返回一个表示该 Integer 值的 String 对象。然后再将对象进行转换 ...原创 2018-04-24 17:14:51 · 3487 阅读 · 1 评论 -
静态代码块,构造代码块
public class StaticTest { //类加载时就执行,且仅执行一次 static { System.out.println("静态代码块"); } //创建对象时执行,且优先于构造函数 { System.out.println("构造代码块"); } StaticTest() { S原创 2017-12-11 20:27:54 · 256 阅读 · 0 评论 -
Java 语言中的 volatile 变量
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。转载 2017-11-28 18:18:38 · 315 阅读 · 0 评论 -
存根类
存根类是一个类,它实现了一个接口,它的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法。但是一个类从业务来说,可能只需要其中一两个方法。如果直接去实现这个接口,除了实现所需的方法,还要实现其他所有的无关方法。而如果通过继承存根类就实现接口,就免去了这种麻烦。 RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程转载 2017-09-10 20:46:51 · 600 阅读 · 0 评论 -
抽象类和接口
相同点:都不能被实例化,位于继承树的顶端,都包含抽象方法 不同点:1、设计目的:接口体现的一种规范,类似与整个系统的总纲,制订了系统各模块应该遵循的标准,因此接口不应该经常改变,一旦改变对整个系统是辐射性的。 抽象类作为多个子类的共同父类,体现的是一种模板式设计,可以当作系统实现过程中的中间产品,已经实现了系统部分功能。 2、使用不同:(1转载 2017-08-09 21:06:19 · 277 阅读 · 0 评论 -
a.length==0、a==null、a == ""、a.equals("") 的区别
a == null 没在堆里开辟内存,即相当于没有new a == “” 创建了一个String对象,但内容为空,长度为零 a.length() == 0 同上 a.equals(“”) 同上 判断一个数组是否为空 int[] a; a==null&&a.length==0;翻译 2017-08-01 21:19:54 · 677 阅读 · 0 评论 -
java的值传递与引用传递
package algorithms.com.guan.javajicu; public class Example { String str = new String("good"); char[] ch = {'a','b','c'}; public static void main(String[] args) { Example ex = new Exampl转载 2017-07-19 22:12:49 · 340 阅读 · 0 评论