
java
龙泉剑
keep moving
展开
-
java 多线程之wait、sleep、yield区别与联系
这三个方法都是java多线程编程中常用的方法,都是用来让出当前线程的执行权,它们的区别如下:1、wait是Object对象的方法,sleep和yield是Thread对象的方法。2、wait会释放当前线程占用的锁,并且必须在同步块中调用,其他两个方法不会释放锁,也不需要再同步块中调用。3、wait可以使当前线程等待一段时间后重新执行,也可以一直等待直到其他线程调原创 2012-08-21 16:46:59 · 1817 阅读 · 0 评论 -
JNI调用动态库.so
1.确保gcc编译器已安装2.编写HelloJNI.java代码,用native声明需要用C实现的函数。如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/test/net/wangliping/HelloJNI.javapackage net.wanglipingpublic class HelloJNI{ static转载 2014-02-26 16:39:53 · 1125 阅读 · 0 评论 -
java throwable exception error
1、throwable是java中所有异常的基类。2、exception是throwable的子类,是应用级的异常, 是用户可以捕获并处理的异常的基类,可以throw也可以在try,catch中处理, 也是我们平时用的最多的。3、error是是throwable的子类,是系统级的异常, 用户是无法处理的,发生error后,程序中止或中断。原创 2014-03-28 14:11:02 · 874 阅读 · 0 评论 -
java 泛型 ?、T
平时看java源代码的时候,如果碰到泛型的话,我想? T K V E这些是经常出现的,但是有时想不起来代表什么意思,今天整理下: ? 表示不确定的java类型。 T 表示java类型。 K V 分别代表java键值中的Key Value。 E 代表Element。 Object跟这些东西代表的java类型有啥区别呢? Object是所有类的根类,是具体的一个类,使转载 2014-03-31 14:44:50 · 1385 阅读 · 0 评论 -
JAVA虚拟机的生命周期
一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。 Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。而这个main()转载 2014-04-08 10:03:17 · 888 阅读 · 0 评论 -
Java多线程异常处理
问题1:子线程中的异常能在主线程中捕获吗? 答案:不能,子线程中的异常如果不处理会导致主线程崩溃。 问题2:子线程中的异常怎么处理? 答案:子线程中的异常需在子线程中处理。原创 2014-06-12 21:17:52 · 1050 阅读 · 0 评论 -
OSGI 入门
OSGI(Open Services Gateway Initiative),或者通俗点说JAVA动态模块系统,定义了一套模块应用开发的框架。OSGI容器实现方案如Knopflerfish, Equinox, and Apache Felix允许你把你的应用分成多个功能模块,这样通过依赖管理这些功能会更加方便。和Servlet和EJB规范类似,OSGI规范包含两大块:一个OSGI容器需要实转载 2014-06-20 09:19:30 · 831 阅读 · 0 评论 -
java 多线程之主线程与子线程
我们通常在主线程中创建子线程来执行特定任务,那么问题来了,子线程如果未执行完毕,主线程会退出吗?带着这个疑问,我们看下面的小demopublic class Main { public Main() { // TODO Auto-generated constructor stub } /** * @param args */ public static voi原创 2014-12-16 21:49:14 · 1575 阅读 · 0 评论 -
Java Classloader详解
当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构: bootstrap classloader | extension classloader | system classloaderbootstrap classloader -引导(也称转载 2015-05-04 14:00:06 · 849 阅读 · 0 评论 -
java nio 精华
全文比较长,想打个比方归纳一下。原文中说了最重要的3个概念,Channel 通道Buffer 缓冲区Selector 选择器其中Channel对应以前的流,Buffer不是什么新东西,Selector是因为nio可以使用异步的非堵塞模式才加入的东西。以前的流总是堵塞的,一个线程只要对它进行操作,其它操作就会被堵塞,也就相当于水管没有阀门,你伸手接水的转载 2015-05-05 19:54:44 · 669 阅读 · 0 评论 -
java 调用linux shell脚本
背景我们在开发过程中,大部分是java开发, 而在文本处理过程中,主要就是脚本进行开发。 java开发的特点就是我们可以很早地进行TDDL, METAQ 等等地对接; 而脚本开发的特点就是在进行批处理的时候非常方便。 前阵子我遇到这么一个需求场景: 对抓取的数据进行打包, 后来又遇到我要通过脚本进行抓取,比如nodejs下基于phantomjs的casperjs爬虫。解决方法转载 2016-06-28 19:32:56 · 1174 阅读 · 0 评论 -
多路复用IO机制:select,poll,epoll
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用转载 2017-03-28 18:49:20 · 381 阅读 · 0 评论 -
Java DCL简单解析
首先必须声明,在volatile出现之前,错误的DCL代码如下。在volatile出现之后,正确的DCL代码如下。代码如下: Java代码 //错误的代码 public class Singleton { private static Singleton instance=null; private Singleton(){}转载 2017-03-15 14:07:09 · 2378 阅读 · 0 评论 -
Java 函数参数传递分析
函数基本的参数传递机制有两种:值传递和引用传递。 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实 参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。 引 用传递(pass-by-reference)原创 2013-12-31 12:21:47 · 1003 阅读 · 0 评论 -
Java 分治法求数组的最小最大值
算法思想:如果数组中只有两个元素则较小的为最小值,较大的为最大值;否则根据下标将数组折半,比较左半部分的最小最大值和右半部分的最小最大值,较小的为最小值,较大的为最大值,此过程递归进行。Java实现:/** * 分治法求数组的最小最大值 * @author cht * */public class AlgoTest { public static void m原创 2013-12-31 15:51:44 · 3454 阅读 · 0 评论 -
二分查找递归与非递归实现
二分查找思想:将有序序列按照中间位置分为两半,如果中间元素与待查找元素相等,则返回;如果中间元素小于待查找元素,则在右半边查找;否则在左半边查找。Java递归实现:public static int find(int[] a,int begin,int end,int b){ if(begin==end){ if(a[begin]==b) retu原创 2013-12-16 21:05:34 · 870 阅读 · 0 评论 -
java 判断字符串是否相等
判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题。java中判断字符串是否相等有两种方法:1、用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b="abc",那么a==b将返回true。这是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指原创 2012-08-26 19:37:01 · 64473 阅读 · 8 评论 -
Java 终止线程
Java Thread.interrupt( )中断线程使用Thread.interrupt()中断线程正如Listing A中所描述的,Thread.interrupt()方法不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和 Thread转载 2012-09-24 10:07:18 · 800 阅读 · 0 评论 -
java事件机制及自定义事件处理
Java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中。 2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。转载 2013-02-20 14:41:33 · 813 阅读 · 0 评论 -
eclipse快捷键
eclipse 快捷键大全,eclipse查找类,文件,添加注释/* ---------------------------------------自理解----------------------------------------*/ctrl+shift+T //查找当前工程下的某个类 实时提示ctrl+shift+R//查找当前工程下的某个文件 实时提转载 2013-03-18 12:33:03 · 774 阅读 · 0 评论 -
java 操作oracle数据库
1、导入所需jar包,在oracle客户端安装目录的\jdbc\lib找到ojdbc14.jar和nls_charset12.jar,将这两个jar包添加到工程中。(比较简单的做法是:在工程中新建一个目录libs,将jar包拷贝到该目录下,在jar文件上右击,选择Add to Build Path)2、编写测试代码import java.sql.*; public原创 2013-04-02 13:34:07 · 962 阅读 · 0 评论 -
java poi读取excel
首先到poi的官网http://poi.apache.org/上下载最新版的poi包,目前最新版是3.9。操作excel需要用到如下几个jar包:然后在java工程中导入上述jar包。代码如下:import java.io.FileInputStream;import java.io.FileNotFoundException;import java.i原创 2013-04-02 13:45:46 · 1238 阅读 · 0 评论 -
java ant builder.xml详解
1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台 --因为ant是使用java实现的,所以它跨平台使用简单--与ant的兄弟make比起来语法清晰--同样是和make相比功能强大--ant能做的事情很多,可能你用了很久,你仍然转载 2013-04-24 09:38:07 · 1333 阅读 · 0 评论 -
jre与jdk的区别
很多程序员已经干了一段时间java了依然不明白jdk与jre的区别。JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。JRE是Java Runtime Enviroment是指J转载 2013-04-24 09:59:56 · 912 阅读 · 0 评论 -
Java Enum
示例:public enum EnumTest { FRANK("The given name of me"), LIU("The family name of me"); private String context; private String getContext(){ return this.context;转载 2013-04-19 15:11:48 · 1077 阅读 · 0 评论 -
java 求两个整数的最大公约数和最小公倍数
求两个整数的最大公约数用辗转相除法比较简单。算法思想:找出两个数中较大的数,然后用较小的数除较大的数,如果余数不为0,则用余数去除上一步计算的除数,知道余数为0,这时除数就是最大公约数。这个算法比较简单明了,用JAVA实现如下: private static int maxGongYuShu(int a,int b){ if(a>b){原创 2013-11-08 15:07:36 · 2636 阅读 · 0 评论 -
动态规划求两个字符串的连续最长公共子序列
设字符串A的长度为A.length,字符串B的长度为B.length。Temp[i][j],为状态数组,0考虑一般情况,如果A[i]==A[j],则Temp[i][j]=Temp[i-1][j-1]+1,否则Temp[i][j]=0,注:因为求的是连续最长公共字串所以此次为0。有了状态转移方程,直接写出代码就可以了。public static int longCom原创 2013-12-11 15:37:19 · 1503 阅读 · 0 评论 -
Java 类访问权限
Java中类的访问权限有两种:一是包访问权限,一是公有访问权限。1、包访问权限写法如下:class A{}也就是说在class前面什么都不加,Java中默认就是包访问权限。顾名思义,包访问权限控制只能在同一个包中访问。比如:package a;class A{}package b;class B{}如果a和b不相同,那么在类A中无法访问B原创 2013-12-29 22:45:27 · 1018 阅读 · 0 评论 -
Java CAS原理分析
最近无意接触了AtomicInteger类compareAndSet(从JDK5开始),搜了搜相关资料,整理了一下首先要说一下,AtomicInteger类compareAndSet通过原子操作实现了CAS操作,最底层基于汇编语言实现。简单说一下原子操作的概念,“原子”代表最小的单位,所以原子操作可以看做最小的执行单位,该操作在执行完毕前不会被任何其他任务或事件打断。CAS转载 2018-01-05 18:34:45 · 326 阅读 · 0 评论