Java
huxl_hi
稳稳地。
展开
-
Java计算点到面、点到线的距离
Java计算点到面、点到线的距离原创 2022-11-25 13:24:26 · 1693 阅读 · 1 评论 -
线程封闭的两种实现方式,ThreadLocal和栈封闭
ThreadLocal使用ThreadLocal<T> 修饰的成员变量,在每个线程使用时,会为每个线程存储独有的一份数据。使用时用get方法获取。可以理解为每个线程为Key的一个Map,但ThreadLocal类中维护的并不是一个Map,只是这么理解。public class ThreadLocalTest { private ThreadLocal<String> value = new ThreadLocal<>(); public static原创 2020-09-11 15:09:23 · 318 阅读 · 0 评论 -
Java线程通信的四种形式及代码示例
线程通信是指多个线程之间的协同,如:线程执行先后顺序、获取某个线程的执行结果等。涉及到线程之间相互通信,分为四类:文件共享、网络共享、变量共享、JDK提供的线程协调API。线程协调API通过多线程协助的典型场景:生产者-消费者模型,来说明。1、被弃用的suspend/resume由于suspend()执行后不会释放锁,导致resume()永远无法拿到锁,而无法通知线程继续执行,示例代码: public void suspendResumeDeadLockTest() throws Ex原创 2020-09-11 14:46:18 · 230 阅读 · 0 评论 -
CPU缓存和内存屏障-待续
CPU缓存Java指令操作CPU缓存时,JVM为提高程序运行效率,会对指令进行重排序,比如写缓存的效率慢于读缓存的效率,在同时存在写和读操作指令时,读操作的指令先执行。但要遵守as-if-serial语义。as-if-serial语义即不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器,runtime和处理器都必须遵守as-if-serial语义。为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改.原创 2020-09-11 10:54:36 · 143 阅读 · 0 评论 -
线程中止的方式
线程中止的三种方式:1、stop()此方式已被弃用,因为无法保证同步代码块的原子性,实例代码如下:public class ThreadStop { public static void main(String[] args) throws InterruptedException { StopThread t = new StopThread(); t.start(); //休眠一秒确保 i 自增成功 Thread.sleep(1000); //暂停线程 t.sto原创 2020-09-10 23:19:09 · 262 阅读 · 0 评论 -
线程状态
线程的六种状态New(新建)、Runnable(可运行状态)、Blocked(阻塞状态)、Terminated(终止)、Waiting(等待)、Timed Waiting(定时等待)。状态转换1、New线程开始后变为Runnable状态2.1、Runnable线程执行结束后变为Terminated状态2.2.1、Runnable线程需要等待锁时变为Blocked状态2.2.2、Blocked线程线程拿到锁时变为Runnable状态2.3.1、Runnable线程需要等待其他线原创 2020-09-10 17:26:29 · 127 阅读 · 0 评论 -
JVM运行时数据区
java源代码通过编译生成.class文件,java程序运行,将.class文件内容加载到方法区。加载.class文件后,实例化的对象会存储到堆内存。程序运行时每个线程有自己的独占空间,包括:虚拟机栈、本地方法栈、程序计数器。方法区、堆内存、虚拟机栈、本地方法栈和程序计数器组成了JVM运行时数据区。方法区JVM用户存储加载的类信息、常量、静态变量、编译后的代码等数据。虚拟机规范中这是一个逻辑分区,具体实现根据不同虚拟机来实现。如:Oracle的HotSpot在Java7中方法区放在永久代原创 2020-09-10 16:53:18 · 138 阅读 · 0 评论 -
Java - Pattern 正则表达式应用 - 替换和分割
1、根据字符串分割String str = "a,d,erad,fs,er,v,fg;sfa,wer,;asd";Pattern COMMAS = Pattern.compile("\\s*[,;]\\s*");String[] arrs = COMMAS.split(str);for (String arr : arrs) { System.out.println(arr);}输出:aderadfservfgsfawerasd2、替换字符串Stri.原创 2020-08-03 16:44:35 · 730 阅读 · 0 评论 -
报错:List.remove(e)-java.lang.UnsupportedOperationException
List<String> list = Arrays.asList("9,4,2,8,4,1,92,14,43".split(",")); list.remove("1"); System.out.println(list); List<String> list = Arrays.asList("9,4,2,8,4,1,92,14,43".s...原创 2019-09-11 15:47:56 · 680 阅读 · 0 评论 -
JVM-垃圾收集器
垃圾收集算法a、标记-清除先标示后清除。效率有限,会产生内存碎片化问题,不适合特别大的堆。b、复制算法划分两块相同大小的区域,收集时将存货的对象复制到另一块区域。拷贝时将对象顺序放置,可以防止内存碎片化。但因多开辟一块内存区域,有一定浪费。c、标记-整理类似标记-清除,为避免碎片化,清除过程中将对象移动,确保移动后的对象可以占用连续的内存空间。分代收集将内存划分为几个区域,...原创 2019-08-11 20:10:34 · 112 阅读 · 0 评论 -
Java获取服务器IP
/** * 获取服务器IP地址 * @return */ public String getHostAddress() { String ret = ""; try { InetAddress address = InetAddress.getLocalHost(); ret = address.getHostAddress(); } catch (...原创 2019-07-11 11:15:07 · 637 阅读 · 0 评论 -
JVM-垃圾收集器
垃圾收集算法a、标记-清除先标示后清除。效率有限,会产生内存碎片化问题,不适合特别大的堆。b、复制算法划分两块相同大小的区域,收集时将存货的对象复制到另一块区域。拷贝时将对象顺序放置,可以防止内存碎片化。但因多开辟一块内存区域,有一定浪费。c、标记-整理类似标记-清除,为避免碎片化,清除过程中将对象移动,确保移动后的对象可以占用连续的内存空间。分代收集将内存划分为几个...原创 2019-06-03 11:29:06 · 178 阅读 · 0 评论 -
AtomicXxx类
Atomic相关类可以实现对指定类型的变量进行原子性操作。volatile + AtomicXxx 大法:1、保证java代码编译期间不被重排序2、多线程操作变量时保证原子性public class CompareAndSetTest { volatile AtomicLong i = new AtomicLong(); public void add() { i.g...原创 2019-05-13 16:37:16 · 117 阅读 · 0 评论 -
通过HttpServletRequest判断客户端浏览器类型是否为IE11
今天测试同事对项目中的文件下个和Excel导出提了bug:IE11浏览器下,文件名如果是中文,下载后的文件会出现乱码。而且下载的方式,是重新打开一个空白多余的浏览器标签。跟了几次代码发现是通过request获取User-Agent判断客户端的浏览器类型时出了问题:String agent = request.getHeader("User-Agent").toLowerCase原创 2016-05-26 20:29:01 · 7914 阅读 · 0 评论 -
Java:获取指定时间所在的年份的第一天是周几
class TestDate{ public void testDate(String date) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); try { c.setTime(df.parse(date)); } cat原创 2016-04-22 14:58:34 · 2328 阅读 · 0 评论 -
MySQL数据库,将一列数据组合成一行,并以逗号分割,GROUP_CONCAT
MySQL数据库的GROUP_CONCAT函数很厉害呀!“厉不厉害?厉不厉害?我就问你厉不厉害?!”“厉害呀!”原创 2016-06-22 18:07:34 · 16257 阅读 · 3 评论 -
基于Spring注解的WebService接口,服务端编码与客户端调用
网上已经有很多spring注解实现WebService的文章,写这一篇主要是为了记录自己写的这个WebService。并为以后再写接口提供参考和改进的依据。开搞======================================服务端:建项目、jar包导入jar包下载地址:(稍后修改)代码部分(一个接口、一个实现类、一个工厂类、两个xml配置文件):接口类接口实现类:工厂类:两个配置文件:...原创 2016-07-19 16:30:29 · 13451 阅读 · 2 评论 -
Eclipse:OutOfMemoryError: PermGen space
加大tomcat内存,防止内存溢出:修改tomcat配置:-Xmx256m -Xms128m -Xmn64m -Xss32m -XX:PermSize=128M原创 2016-11-10 17:15:25 · 224 阅读 · 0 评论 -
SpringMVC启动时报错:Unable to create a Configuration, because no Bean Validation provider could be found.
Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failedUnable to create a Configuration, because no Bean Validation provider could be found原创 2017-06-08 22:54:12 · 15325 阅读 · 1 评论 -
基于Axis的Webservice接口开发与调用
基于Axis的Webservice接口开发与调用1、创建一个web项目网上很多,不做赘述。2、添加需要的jar包3、写webservice服务类public class ExampleWebService { public String sayHello(String name, int age){ return "hello ".concat(name).co...原创 2018-11-16 15:26:08 · 693 阅读 · 2 评论 -
Java-发送邮件-工具类和配置文件
配置文件:文件名称:mail.propertiesmail.smtp.host=smtp.163.commail.smtp.port=25mail.smtp.auth=truemail.transport.protocol=smtpuserName=xxx@163.compassword=授权码sendNo=xxx@163.com工具类:import java.i...原创 2019-01-25 15:09:20 · 864 阅读 · 0 评论 -
Java-volatile关键字
volatitle可以保证程序每次读取得都是最新值:如下程序永远不会输出执行结束:ipublic class VolatileTest { private boolean flag = true; //private volatitle boolean flag = true; public static void main(String[] args) thr...原创 2019-05-13 14:31:37 · 337 阅读 · 0 评论 -
服务端获取手机客户端的请求路径以及请求参数,拼接成带参数的URL格式
代码如下:System.out.println("手机端>>>>>>>> " + "192.168.1.99" + request.getRequestURI() //路径 + (request.getQueryString() == null ? "" : "?" + request.getQueryString()));//参数打印到控制台的格式:原创 2016-06-12 11:00:32 · 2290 阅读 · 0 评论