【Java高级】
文章平均质量分 90
青山师
编码、架构、程序人生;此博客输出内容永久免费,长期分享JAVA开发技术
展开
-
延迟队列的设计与最佳实践
在现代分布式系统中,延迟任务是一种非常重要的概念。它们可以用来处理需要特殊关注或执行的任务,如发邮件、推送消息或生成报告等。为了实现这些任务,我们需要一种强大而可靠的工具,即延迟队列。在本博客中,我们将介绍延迟队列的设计和最佳实践。我们将使用RabbitMQ和Redis两种技术来展示各自的实践方法,并提供操作步骤。原创 2023-04-06 19:13:34 · 1071 阅读 · 0 评论 -
深入理解Java注解
Java注解可以提供代码的某些信息,但并不是直接影响它所注解的代码的。我们先了解java内置的注解使用,然后编写自定义注解,理解注解的具体使用方法,利用反射技术解析注解。Java注解Java注解是在1.5开始引入的,此后在java EE框架中经常使用,例如:Hibernate, Jersey, Spring 等。Java注解作为程序的元数据嵌入到代码中。注解将会被编译器解析或者通过解析器来解析,我们翻译 2017-05-12 00:12:16 · 1274 阅读 · 0 评论 -
一个标准的JAVA枚举类
一个标准的JAVA枚举类(来源是LMAX公司的一个提供银行的小项目)/** * Copyright 2013 Marc Wrobel (marc.wrobel@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in原创 2017-08-18 17:08:55 · 1981 阅读 · 0 评论 -
Java 理论与实践: 非阻塞算法
Java 理论与实践: 非阻塞算法简介资料来源,请访问: http://www.ibm.com/developerworks/cn/java/j-jtp04186/Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能。非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性...转载 2016-06-30 20:24:54 · 838 阅读 · 0 评论 -
jstack 命令查看JAVA线程堆栈
JAVA堆栈信息实际生产中,可能由于开发以及测试未能全面覆盖的代码质量、性能问题,而引致线程挂起甚至崩溃。可能就需要查看堆栈信息来排查问题了。jps -lvmjps -lvm 用于查看当前机器上运行的java进程。C:\Users\Administrator>jps -lvm7348 -Dosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.defa原创 2017-08-06 14:12:52 · 25911 阅读 · 0 评论 -
并行的2个重要定律Amdahl、Gustafson定律
并发程序的几个概念同步(Synchronous) 异步(Asynchronous) 阻塞 (Blocking)非阻塞 (Non-Blocking)死锁 (Deadlock)同步和异步通常用来形容方法的调用方式。 同步的方法调用时,后续行为需要等到方法执行完毕后才能执行。 异步调用时,一旦调用可以立即拿到结果,调用方可以继续后续的操作。举个生活中的例子,两件事:煮饭、烧菜。同步就是原创 2017-06-04 16:46:21 · 8299 阅读 · 2 评论 -
java中正则表达式的使用
java中正则表达式的使用相关API类的使用示例java中正则表达式匹配,主要使用api中的个类:Pattern、Matcher、PatternSyntaxExceptionPattern 类的静态方法 compile(String regexp) 可以将给定的正则表达式编译成模式。Matcher 类的实例可以通过已经编译好的模式的方法 matcher(String arg) ...原创 2018-02-27 13:03:19 · 394 阅读 · 0 评论 -
【JVM】Java对象四种引用类型(强、软、弱和虚引用)详解
原文出处: http://blog.51cto.com/zhangjunhd/530921.对象的强、软、弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次...转载 2018-08-16 16:01:55 · 490 阅读 · 0 评论 -
Java 堆栈信息对象 StackTraceElement,获取当前线程的执行方法
java.langStackTraceElement类保存了Java中线程中的方法栈信息:4个属性: /** * 声明的类,是类的全限定名 */ private String declaringClass; /** * 方法名 */ private String methodName; /** * 文件名一般指:XXX.java */ private S...原创 2018-10-12 19:15:23 · 4378 阅读 · 0 评论 -
javassist编程指南(一)
javassist编程指南(主译)javassist是什么?Javassist(Java 编程辅助)使得Java字节码操作更简单。Javassist可用于编辑字节码的类库。允许Java程序可以在运行时定义一个新的class、在JVM加载时修改class文件。不像其它的字节码编辑器,javassist提供了2各层次的API:源码级别、字节码级别。如果用户使用了源码级别的API,...翻译 2019-03-25 19:18:33 · 968 阅读 · 0 评论 -
CountDown 倒计数器--JAVA并发类模拟运动员赛跑
并发类CountDownLatch类的使用示例 * CountDownLatch = Count(计数) + Down(减少) + Latch(门闩(可以理解为控制开关)) * 该类是java.util.concurrent包(大神 Doug Lea)下的一个同步锁计数器类。 * 该类最有用的方法: * (1)传入计数器初始值创建对象:CountDownLatch startLatch = new CountDownLatch(int cnt); * (2)down()方法:对计数器进行减1操原创 2016-07-05 18:04:49 · 1727 阅读 · 0 评论 -
JVM内存模型 - 主内存和线程独立的工作内存
JVM内存模型 - 主内存和线程独立的工作内存Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存,线程只能访问自己的工作内存,不可以访问其它线程的工作内存。工作内存中保存了主内存共享变量的副本,线程要操作这些共享变量,只能通过操作工作内存中的副本来实现,操作完毕之后再同步回到主内存当中。如何保证多个线程操作主内存的数据完整性是一个难题,Java内存模型也规转载 2017-06-01 17:49:24 · 2360 阅读 · 0 评论 -
java.security.ProviderException: java.security.KeyException
本机部署没问题,部署到linux服务器报错:javax.net.ssl.SSLException: java.security.ProviderException: java.security.KeyException 一般是JDK不同厂商导致的,需要换成换成sun的jdk版本。检查linux上的是否为openjdk。原创 2016-11-29 18:02:07 · 3046 阅读 · 0 评论 -
java注解讲解与实用示例
java从1.5开始给程序员提供了不少语法糖,注解就是其中之一,Thinking in JAVA 第四版调侃说这是迫于来自C#等语言的特性不得不做出的改变。 注解早在J2SE1.5就被引入到Java中,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据。解释何为注解的最佳方式就是元数据这个词:描述数据自身的数据。注解就是代码的元数据,他们包含了代码自身的信息。注解可以被用在包,类,方法,变量,参数上。自Java8起,有一种注解几乎可以被放在代码的任何位置,叫做类型注解。我们将原创 2016-06-28 20:15:55 · 912 阅读 · 0 评论 -
可能用到的java扩展包:javax.*
以下是可能用到的java扩展包:javax.*。 javax-jmi-model.jar javax-jmi-reflect.jar javax-mail-1.3.jar javax-ssl-1_1.jar javax-xml-soap-1.6.0.jar javax.activation.jar javax.activation_1.1.0.v201005080500.jar原创 2017-01-09 11:09:17 · 3393 阅读 · 0 评论 -
javax/validation/ParameterNameProvider
使用hinernate的校验包的时候报javax/validation/ParameterNameProvider的错误 这是因为javax.validation扩展包版本和hibernate-validator包版本不一致导致的,可以这样解决:<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-v原创 2017-01-09 14:34:31 · 5185 阅读 · 0 评论 -
Java中的classpath
Java中的classpathclasspath,顾名思义即java源代码编译后的字节码文件*.class的寻址路径。你需要将字节码文件放到公用目录下,否则java程序将无法搜索到相应的执行类。我们可以设置classpath,使其包含所需文件的目录和jar文件或zip文件。java运行时将会利用classpath查找执行类,会遍历classpath所包含的每一个路径,直到找到相应的文件为止。java原创 2017-03-26 12:44:58 · 906 阅读 · 0 评论 -
java调试命令jdb
在命令行中可以使用jdb命令来进行类的调试:类Hello.java如下:class Hello{ public static void main(String[] args){ System.out.println("输出100/0的结果:"); System.out.println(100/0); }}在类目录下使用 javac Hello.jav原创 2017-03-26 13:29:46 · 1511 阅读 · 0 评论 -
Java中的正则表达式
java中使用正则表达式的常用方式有两种:一是使用String类的matches方法;二是使用java.util.regex包下的类Pattern、Matcher。使用方式如下:package com.byron4j.hightLevel.regexp;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 正则表达原创 2017-04-03 02:47:30 · 478 阅读 · 0 评论 -
Java核心(三)反射
Java反射给我们提供了在运行时检查甚至修改应用行为的机制。 反射是java高级的核心技术,所有有经验的程序员都应该理解。通过反射机制,我们可以在运行时检视 类、接口、枚举,获得他们的结构、方法以及属性信息,即使在编译期类是不可访问的。 我们也可以通过反射创建类实例,调用它的方法,或者改变属性值。Java中的反射Java的反射是一种很强大的机制,在正常的编程中使用并不多,但它是java的主干,很原创 2017-05-14 01:35:26 · 787 阅读 · 0 评论 -
Java依赖注入(DI)实例详解
Java依赖注入模式允许我们摆脱硬编码,使我们的应用更加松耦合、增强扩展性以及可维护性。通过依赖注入我们可以降低从编译到运行时的依赖性。Java依赖注入Java的依赖注入仅仅通过理论是很难解明白的,所以我们通过几个简单的示例来描述它,怎样利用依赖注入模式降低我们应用之间的耦合性和增强可扩展性。假设我们的应用需要通过 EmailService 去发送email,通常情况下,我们是这样实翻译 2017-05-09 23:54:31 · 12710 阅读 · 2 评论 -
Unsupported major.minor version 52.0 (unable to load class XXX
更多精彩请阅读 东陆之滇的csdn博客:http://blog.csdn.net/zixiao217 maven项目在服务器上构建时报错(Unsupported major.minor version 52.0 ): java.lang.UnsupportedClassVersionError: com/byron4j/listener/InitListener : Unsupported ma原创 2016-10-14 19:59:59 · 26857 阅读 · 0 评论