JAVA基础
文章平均质量分 87
羽化而登仙~
生活就这么一回,有什么好怕的,有什么不敢做的,大胆向前走,不让人生充满遗憾。
展开
-
深入理解Java虚拟机三 垃圾回收机制
前言文章是看了《深入理解Java虚拟机》书后进行的整理和总结,算是一个读书笔记吧。深入理解Java虚拟机一 虚拟机内存管理机制 深入理解Java虚拟机二 虚拟机类加载机制 深入理解Java虚拟机三 垃圾回收机制一、如何确定对象已死虚拟机的垃圾收集策略自动为我们管理虚拟机的内存空间,当某个对象“已死”,虚拟机就会在适当的时机将该对象占用的内存释放。如果你是一个思维灵活的人,那么你应该看出这句话的几个要点了。如何判断对象是否“已死”,或者说已经不再使用了呢? 如何释放这些对象占用的内存?转载 2020-06-27 12:48:24 · 240 阅读 · 0 评论 -
java 类加载器,SPI机制,spring factories的原理
java的SPI机制打破双亲委派进行加载类。约定条件如下:1、当一个服务提供者提供了一个接口的具体实现后,在该服务打的jar包里的META-INFO/services目录下创建一个以接口全限名为命令的文件,文件里的内容为接口的实现类。2、将这个jar包放入到主程序的classPath中。...原创 2020-06-11 18:14:05 · 1518 阅读 · 1 评论 -
java NIO及IO模型介绍
NIO: 使用的对外内存。三大组件:Channel:通道,通道有点像流,数据可以从Channel读到Buffer中。通过linux底层对网络io或文件io建立通道。 FileChannel,DatagramChannel,SocketChannel,ServerSocketChannel //在和服务端连接成功之后,为了可...原创 2020-04-25 16:20:31 · 560 阅读 · 0 评论 -
ArrayBlockingQueue数组队列的实现原理及实现一个demo
ArrayBlockingQueue数组队列的实现原理:1、对一个数组进行添加和取出数据操作。2、其中的put和get用同一把lock锁进行互斥操作,控制多线程并发情况。3、当put方法中,数组满时,通过lock下的conditionA 调用await方法阻塞当前线程(LockSupport.park方法)并释放了lock锁,并将阻塞线程存入到队列中。4、由于3步骤已经释放了lock锁,...原创 2020-03-29 22:49:51 · 624 阅读 · 0 评论 -
java AQS、CountDownLatch、ReentrantLock锁实现原理
ReentrantLock原理:通过CAS指令 + AQS队列实现对线程加锁。结构:ReentrantLock实现接口Lock的lock()和unLock()方法,内部有两个内部类公平锁FairSync和非公平锁NonfairSync,这两个类均继承了AbstractQueueSynchronizer(里面存有Node双向链表组成一个队列,还有head,tail节点,state状态,waitS...原创 2020-03-24 00:14:22 · 286 阅读 · 0 评论 -
java中的AtomicInteger的详细原理
这个原理在网上搜索了很多都没搞清楚真正原因,后来参照了一个帖子彻底解决了我的疑问:https://blog.csdn.net/qq_34115899/article/details/830188701、首先确定实例域在class文件中的偏移量位置。这个偏移量设置在valueOffset中,即如下代码2、当调用当外部调用incrementAndGet或addAndGet等方法时,会调用...原创 2020-03-22 16:14:00 · 1384 阅读 · 0 评论 -
使用javaMail收邮件
使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap。这两种协议都可以用来收邮件,但是在其中的处理上是有区别的。pop3是不支持判断邮件是否为已读的,也就是说你不能直接从收件箱里面取到未读邮件,这需要自己进行判断,然而imap就提供了这样的功能,使用imap时可以很轻松的判断该邮件是否为已读或未读或其他。 此外收件箱中的每一封邮件都对应着一个MessageNum转载 2013-12-16 11:51:04 · 1362 阅读 · 0 评论 -
读取properties文件,快速取值
String fieldValue = null; Properties pro = new Properties(); File file = new File(“文件路径”); FileInputStream fileInputStream = null; fileInputStream = new FileInp原创 2013-12-13 11:19:10 · 1224 阅读 · 0 评论 -
获取当前的spring容器ApplicationContext 。
方法一:(获取当前的spring容器,任何java类中适用) ServletContext application = ServletActionContext.getServletContext(); ApplicationContext act = ContextLoader.getCurrentWebApplicationContext()原创 2013-12-13 14:34:37 · 19836 阅读 · 0 评论 -
安装和使用memcached
引用:http://www.czhphp.com/archives/252如何将 memcached 融入到您的环境中?在开始安装和使用 using memcached 之前,我们需要了解如何将 memcached 融入到您的环境中。虽然在任何地方都可以使用 memcached,但我发现需要在数据库层中执行几个经常性查询时,memcached 往往能发挥最大的效用。我经常会在数据库和应用服转载 2014-02-21 17:13:02 · 625 阅读 · 0 评论 -
java Thread线程中断详情
目标:中断线程。场景1.:对于一个正在运行的java 线程,没有处于sleep状态,这时如果要中断线程方法如下: a: (推荐方法)可以用while(flag)这种设定flag值的形式来退出run方法,thread类会自动回收改对象。 b:调用interrupt方法。 c: 调用 stop方法。(此方法已经淘汰了,话说安全性原创 2013-11-28 17:14:59 · 936 阅读 · 0 评论 -
跨语言之间的socket通信(C--Java的握手)
这些日子在公司开发一个基于B/S的服务器监控的, 服务器端是视频电话系统,是C语言UDP的WinSock建立的Socket监听,客户端我是用了JSP进行开发,开发环境是MyEclipse6.0+Tomcat5.5+jdk6.0,于是要用Java的UDP socket与WinSock进行握手谈话,嘻嘻,说得形象了点。首先开始谈话吧!!!!!!!!.................(1)谈话开始,转载 2013-11-01 12:55:13 · 3877 阅读 · 0 评论 -
socket 发送邮件的SMTP指令
客户端一些常用的SMTP指令为: HELO hostname: 与服务器打招呼并告知客户端使用的机器名字,可以随便填写 MAIL FROM: sender_id : 告诉服务器发信人的地址 RCPT TO: receiver_id : 告诉服务器收信人的地址 DATA : 下面开始传输信件内容,且最后要以只含有.的特殊行结束 RESET: 取消刚才的指令,从新开始 VE原创 2013-10-14 17:00:24 · 2061 阅读 · 0 评论 -
sun.net.ftp.FtpClient上传,下载,移动文件,修改文件等等
public class ftpclientutil {ftpclient ftpclient;private string server;private int port;private string username;private string userpassword;public ftpclientutil(string server,int port,str原创 2012-06-21 17:23:14 · 7898 阅读 · 3 评论 -
Eclipse 远程调试
第一种方式:有些时候,调试不得不用外网,比如说做支付宝的支付接口,服务器后台通 知就不得不用外网的ip。无奈,只能扔到服务器远程调试了。网上讲关于远程调试tomcat的倒是蛮多,基本都是将改啥catalina.sh,startup.sh的,操作还是复杂点。下面这篇就只针对于 linux下的tomcat远程调试,不用改啥文件,简单而又没啥副作用。本人在tomcat6 的情况下远程调试成功。原创 2014-01-13 19:36:52 · 5896 阅读 · 0 评论 -
Java中Transient关键字在对象序列化中的作用
在对象序列化的时候,有些变量比如密码等等,你需希望他去序列化,否则别人就可以通过字节流来回复数据得到你的private的数据,这样是一个很危险的问题,下面使用关键字Transient 来解决这个问题,他的意思就是不需要虚拟机去序列化这个变量,我会自己去处理.注意了,这里是仅仅在对象序列化的时候,我有讲过,可以看一下哈。package com.bird.thinking;import j转载 2014-01-28 15:16:49 · 1321 阅读 · 0 评论 -
java classload 机制 详解
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要从远程下载 Java 类文件到浏览器中并执行。现在类加载器在 Web 容器和 OSGi 中得到了广泛原创 2012-02-12 17:49:48 · 8404 阅读 · 0 评论 -
为什么覆盖equals方法一定要覆盖hashCode方法
1. Java 中 Equals和==的区别: (没区别,都是比较物理地址,但是equals可以被覆盖)首先equals和== 最大的区别是一个是方法一个是运算符,在Java中,二者比较的都是物理地址 而不是值得比较。我们举个例子这样比较直观。Student student1 = new Student();Student student2 = new Stu转载 2017-10-28 11:25:26 · 4462 阅读 · 0 评论 -
假如您需要通过js跨域向https发起请求,方法如下两种:
通过HttpClient 访问请求https(js是不支持的,因为需要服务器json格式才行) String path = InitAction.class.getResource("/i2000.keystore").getFile(); System.setProperty("javax.net.ssl.trustStore", path原创 2013-08-14 11:33:10 · 15867 阅读 · 1 评论 -
java程序访问http,或https最简单的方法
首先要引入包http-request-5.6.jar 关于jar包,我已经是上传了哈。下面代码其实就几句就行了,其他业务代码不必理会。 /** * this method is 授权 * @return * @createTime 2015年1月5日 下午4:26:09 * @author yangwd */ public String accesstoken原创 2015-01-05 19:45:10 · 8069 阅读 · 2 评论 -
TOMCAT HTTPS访问配置应用
TOMCATHTTPS访问设置 1. 首先确定已经安装了JDK或JRE,并配置java运行环境。OnWindows:C:\>set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_16C:\>set PATH=%JAVA_HOME%\bin;%PATH%On Linux:# exportJAVA_HOME=/usr/java/l转载 2014-03-20 17:03:04 · 2396 阅读 · 0 评论 -
Java程序使用memcached配置与示例
Memcached作为一款很强大的分布式缓存,经常被用到大型的互联网应用中,比如新浪微博等都采用memcached做缓存。Memcached也经常和MySQL组合做数据缓存。具体的介绍请参考官方网站:www.memcached.org这里通过安装配置Memcached,并通过Java客户端来使用memcached进行存储和读取缓存数据。环境:Ubuntu10.0转载 2014-02-21 17:34:01 · 736 阅读 · 0 评论 -
使用RSA进行信息加密解密的WebService示例
WebService采用的协议是SOAP,它基于HTTP,而HTTP是明文方式,也就是说,采用WebService传递的数据是明文的。如果是天气预报这种公开的只读信息的WebService无所谓,如果涉及写入或是和私密数据相关,那么明文传递就有很大的潜在危险性,必须加以遏止。一般来说有两种方法,一是采用https加密的方式,另一种是用非对称加密算法对数据加密,下文提到的RSA就是第二种。转载 2014-02-21 15:30:43 · 1658 阅读 · 0 评论 -
ReentrantLock 的使用方法
一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。ReentrantLock 将由最近成功获得锁,并且还没有释放该锁的线程所拥有。当锁没有被另一个线程所拥有时,调用lock 的线程将成功获取该锁并返回。如果当前线程已经拥有该锁,此方法将立即返回。可以使用 isHeldByCurrentTh原创 2013-09-16 15:25:57 · 1077 阅读 · 0 评论 -
Tomcat连接线程池配置
第1种方式:配置ConnectormaxThreads:tomcat可用于请求处理的最大线程数minSpareThreads:tomcat初始线程数,即最小空闲线程数maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理[xh转载 2013-04-24 09:01:20 · 728 阅读 · 0 评论 -
用@Resource和@Autowired注解完成属性装配 .
这个配置隐式注册了多个对注释进行解析处理的处理器:AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor注:@Resource注解在Spring安装目录的lib原创 2012-04-17 15:55:03 · 3174 阅读 · 0 评论 -
Java反射机制简介 .
Java中的反射机制通俗地说就是把Java类中的各种成分映射成相应的Java类。 对于Java程序而言,利用反射机制会导致程序性能的下降。 我们知道每个Java类都可以用一个Class类的对象来表示,一个类的组成部分:成员变量,方法,构造方法,包结构等等信息也用一个个类来表示,就像汽车是一个类,汽车的组成部分:发动机、变速箱、底盘等也可以是一个个的类。表示Java类的C原创 2012-03-31 01:50:26 · 568 阅读 · 0 评论 -
EXCEL导入功能java代码实现
public void importOrganizationPage(File filePath){ //判断文件是否为EXCEL文件 String strFile = filePath.getName(); if(!strFile.substring(strFile.lastIndexOf('.') + 1, strFile.lastIndexOf('.') + 5).equa原创 2012-03-20 14:16:22 · 9450 阅读 · 0 评论 -
Java:Class.forName()与ClassLoader.loadClass()的区别
Class clazz = Class.forName("XXX.XXX");与ClassLoader cl = Thread.currentThread().getContextClassLoader();Class clazz = cl.loadClass("XXX.XXX");都可以装载一个类那么他们的区别是什么呢?进一步研究Class.forName()是调用Cla原创 2012-02-12 17:58:36 · 6102 阅读 · 0 评论 -
Java学习之二-Java反射机制
Java学习之二-Java反射机制问题: 在运行时,对一个JAVA类,能否知道属性和方法;能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现。 目录 什么是JAVA的反射机制 JDK中提供的Reflection API JAVA反射机制提供了什么功能获取类的Class对象 获取类的Fields 获取类的Method 获取类原创 2012-02-12 17:40:16 · 670 阅读 · 0 评论 -
jdom解析xml
我自己的写的:(假如我们现在xml是存在数据库的某一个字段中,先取出这个字符串也就是xml文件嘛,现在得到的这个xml是放在我们程序的一个String里面的)//这里我们也知道xml文件格式撒: StringReader reader = new StringReader(BackItemOrder_xml); SAXBuilder sax = new SAXBuilder();原创 2012-02-21 17:26:42 · 1992 阅读 · 0 评论 -
dom4j解析xml字符串实例
//先加入dom4j.jar包 import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;i原创 2012-02-10 00:02:02 · 1089 阅读 · 1 评论 -
Java中Native关键字
Java中Native关键字Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。 可以将native方法比作Java程序同C程序的接口,其实现步骤: 1、在Java中声明native()方法,然后编译; 2、用javah产生一个.原创 2012-02-09 21:56:22 · 644 阅读 · 0 评论 -
synchronized
1. synchronized 方法 :通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如:public synchronizedvoid accessVal( int newVal); synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类原创 2012-02-09 16:59:41 · 423 阅读 · 0 评论 -
Java中如何实现程序国际化
Java中如何实现程序国际化最近在学习《疯狂Java讲义》这本书,研究了一下在Java中如何实现程序国际化,发现Java的程序国际化挺简单的,就整理了一下思路,如下所示: 1 Java国际化的思路Java程序的国际化的思路是将程序中的标签、提示等信息放在资源文件中,程序需要支持哪些国家、语言环境,就对应提供相应的资源文件。资源文件是key-value对,每个资源文件中的key是原创 2012-04-23 11:01:22 · 3541 阅读 · 0 评论 -
java动态代理
public interface IUserManager { //接口 public void add(String userName); public void delete(String userName); public String query(String userName);}----------------public class UserMan转载 2012-05-15 10:54:29 · 844 阅读 · 0 评论 -
深入探讨 Java 类加载器
简介: 类加载器(class loader)是 Java™中的一个很重要的概念。类加载器负责加载 Java 类的字节代码到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模式、加载类的具体过程和线程上下文类加载器等,接着介绍如何开发自己的类加载器,最后介绍了类加载器在 Web 容器和 OSGi™中的应用。类加载器是 Java 语言的一个创新,也是 Jav转载 2012-06-14 14:32:56 · 660 阅读 · 0 评论 -
java Socket 发送邮件
import java.io.*;import java.net.*;import sun.misc.*;public class SendEmail {PrintWriter output;BufferedReader input;String string;Socket socket = null;String user = "308727233@qq.原创 2013-05-23 09:02:29 · 990 阅读 · 0 评论 -
java的同步调用、回调和异步调用。
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。 同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回 调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即原创 2012-04-11 17:48:26 · 23279 阅读 · 0 评论 -
不断的跨域访问的时候,如果jquery,ajax都没办法解决的时候,用下面这个吧:
不断的跨域访问的时候,如果jquery,ajax都没办法解决的时候,用下面这个吧:页面中:js中:function calcI2000Req(){ $("#J-iframe").attr("src","https://192.168.168.124:31943/servlet/keeplive?rd="+Math.random()); setTimeou原创 2013-08-20 16:56:48 · 988 阅读 · 0 评论