Java
tterminator
let the code say
展开
-
Java执行shell脚本文件完整代码
一、背景最近要下线一台历史遗留的物理机,在整理该机的crontab任务时,发现有不少纯shell脚本形式的定时任务,决定使用Java写一个执行shell脚本文件的通用工具类。二、实现方式Java执行shell脚本文件共有两种方式,两种方式的共同点均是创建独立的process执行脚本文件。方式1:通过Runtime创建processProcess process = Runt...原创 2018-08-30 20:29:03 · 31699 阅读 · 0 评论 -
Java环境变量说开去
1、用Java开发的前提就是安装完jdk后并进行正确的环境变量设置,很多人在设置环境变量时都喜欢新建或设置三个变量:JAVA_HOME、PATH、CLASSPATH;其实经过实践证明,只需要正确设置前两个环境变量JAVA_HOME和PATH就可以了,第三个不仅没有必要设置,而且容易出错(如网上有些设置值为.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.原创 2015-02-25 21:47:50 · 489 阅读 · 0 评论 -
JAVA如何取得HTTP请求头
在利用Java网络编程时,利用Java获取HTTP Request 和 Response头字段;可以利用Java语言根据需要添加自定义的HTTP头字段,而不必拘泥于标准HTTP定义的头字段。代码如下:public class TestURL { public static void main(String[] args) { String destURLStr=原创 2015-03-31 23:54:14 · 13247 阅读 · 0 评论 -
Java工程师成神之路
来自:HollisChuang's Blog链接:http://www.hollischuang.com/archives/489仅供学习使用~一、基础篇1.1 JVM1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id=133http://ifeve.c转载 2015-12-22 19:31:16 · 611 阅读 · 0 评论 -
Java内存模型:线程并发下的对象逸出
Java内存模型:线程并发下的对象逸出原因及解决方案:原创 2016-01-05 11:02:12 · 897 阅读 · 0 评论 -
Java泛型通配符解惑
仅供学习使用,原文链接http://www.linuxidc.com/Linux/2013-10/90928.htm引言下文中需要用到的类定义:Anilmal类public class Animal { private String name; public Animal(String name) { this.name = name; } public转载 2016-02-24 15:34:02 · 627 阅读 · 0 评论 -
Java properties存储与读取遍历
一、向Properties中添加属性public Object setProperty(String key, String value)调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。强制要求为属性的键和值使用字符串。返回值是Hashtable 调用 put 的结果。参数:ke原创 2016-03-02 16:33:19 · 6349 阅读 · 0 评论 -
Java并发之 CAS + Thread.join / CountDownLatch 方式实现线程安全
一、问题描述在多线程开发中,由并发引起的问题很不容易发觉,这里分别实现了线程安全和非线程安全的两种计数器。可以明显的看出多线程并发引发的数据丢失问题。二、问题分析这里非线程安全的计数器的起因是计数器中的count++;操作是非原子操作。为解决count++;非原子操作问题,这里模拟了硬件级解决方案CAS(Compare And Swap,比较并交换),是一种乐观锁方案。 CAS有3个操作数,原创 2016-04-11 14:11:46 · 1250 阅读 · 0 评论 -
笔记:Java二进制Class文件结构<未完待续>
一、class文件结构 类型 名称 数量 u4 magic 1 u2 minor_version 1 u2 major_version 1 u2 constant_pool_count 1 cp_info constant_pool constant_pool_count - 1 u2 access_flags 1原创 2016-04-17 16:55:02 · 654 阅读 · 0 评论 -
Java Thread 状态转换
一、线程状态转换图状态图转换如下: 状态说明 New:创建状态,线程创建后未启动时的状态。Running:运行状态,线程启动并获得cpu时间片(在运行状态之前还有一个就绪状态,是指其它运行资源都就绪,只要获得cpu时间片后即可运行的状态)。Waiting:无限期等待状态,处于此状态的线程不会被分配cpu时间片,需要等待被其它线程唤醒。Timed Waiting:限期等待状态,处于此状态的线原创 2016-04-18 16:48:45 · 1094 阅读 · 1 评论 -
Java序列化
此时必须注意的是,当重新读取被保存的Person对象时,并没有调用Person的任何构造器,看起来就像是直接使用字节将Person对象还原出来的。当Person对象被保存到person.out文件中之后,我们可以在其它地方去读取该文件以还原对象,但必须确保该读取程序的CLASSPATH中包含有Person.class(哪怕在读取Person对象时并没有显示地使用Person类,如上例所示)原创 2014-10-30 12:36:33 · 520 阅读 · 0 评论 -
利用反射获取并使用自定义对象
新建一个包:其中包含两个类,helloworld.java和staticClass.java。代码如下:helloworld.javapackage test;public class helloworld {public static void main(String[] args) { try {/* test.staticClass我们自己定义的类,注意一:这里必须使用权原创 2013-12-06 15:38:45 · 1218 阅读 · 0 评论 -
JVM进程jar包加载分析
有时在一个应用中,会依赖很多的jar包,难免会出现引用不同jar包中的同名类。这时搞清楚: JVM启动时加载了哪些jar包 或者一个类来自哪个jar中来就非常重要了。 一、查看JVM加载了哪些jar包启动JVM,通过如下命令获取进程号:jps -lm其中参数: -l:输出main所在类的全名,如果执行的是jar包,则输出jar包路径 -m:输出jvm进程启动时传递给m原创 2016-12-14 22:52:34 · 12131 阅读 · 0 评论 -
Java远程调试 Eclipse/IDEA
一、模拟客户端源码package testR;import java.io.BufferedWriter;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;public class TestMain { publi原创 2016-08-06 12:08:41 · 1808 阅读 · 0 评论 -
Java虚拟机性能监控及应用故障处理工具笔记
一、jpsjps主要用于获取Java虚拟机的进程号,可配合以下参数使用: -l:输出main函数所在的主类全名,如果执行的是jar包,则输出jar包的路径; -m:输出jvm进程启动时传递给主类main函数的参数; -v:输出jvm进程启动时所传的配置参数;二、jinfo查看虚拟机启动时的配置参数,与jps -v相比,可以看到更多内容:例如通过参数-sysprops看到System.getP原创 2016-12-15 23:45:05 · 561 阅读 · 0 评论 -
Jvisualvm探索:插件安装、类加载速度调优、BTrace
一、插件安装 visualvim插件网址:http://visualvm.github.io/plugins.htmljvisualvm是随jdk一同发布的jvm诊断工具,通过插件可以扩展很多功能,插件扩展也是jvisualvm的精华所在。 打开该工具,通过菜单“工具”—>“插件”开发以下对话框: 在可用插件tab中选择需要安装的插件,本博文中需要用到两个插件如上图中的方框所示。二、调原创 2017-10-16 00:02:38 · 1491 阅读 · 0 评论 -
dmesg排查消失的进程
一、适用场景:如果发现自己的java进程悄无声息的消失了,几乎没有留下任何线索,那么dmesg一发,很有可能有你想要的。二、具体操作sudo dmesg|grep -i kill | less去找关键字oom_killer,找到的结果类似如下:[6710782.021013] java invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oo转载 2017-10-08 22:00:52 · 11576 阅读 · 0 评论 -
Java traps之日期格式化
日期格式化中HH与hh的区别yyyy-MM-dd hh:mm:ss与yyyy-MM-dd HH:mm:ss区别:一个是12小时制,一个是24小时制原创 2017-10-08 21:49:42 · 296 阅读 · 0 评论 -
Java traps之字符串split
字符串splitJava中,字符串的split(“,”)与split(“,”, -1)的区别:一个忽略末尾的空字符,一个不忽略末尾的空字符。 例如:"test,,"split(",")返回的数组长度为1split(",", -1)返回的数组长度为3jdk中关于split(String regex, int limit)中参数limit的说明: * <p> The {@code limit} p原创 2017-10-08 21:47:01 · 272 阅读 · 0 评论 -
IDEA 安装PlantUML
一、IDEA安装PlantUML插件1.ctrl+shift+s打开setting面板,执行如下操作:Plugins-->Install JetBrains plugin...-->搜索plantuml 搜索出PlantUML后,点击安装,重启IDEA,PlantUML插件即可安装成功。二、开始画UML图1.新建UML文件 2.这里以创建时序图为例,输入文件名为UmlSequence原创 2017-10-08 21:20:22 · 28938 阅读 · 3 评论 -
Java 数组转换为list和set
Java 数组转换为list和set:HashSet<String> codeSet= new HashSet<String>(Arrays.asList(new String[]{"150500", "150501", "150600", "150700", "150701", "150702"}));相关博文链接 java.util包数据结构互相转换原创 2017-06-16 23:08:43 · 399 阅读 · 0 评论 -
FastJson toString过滤指定的对象属性
最近在做一个需求时,遇到一个问题,在把Java对象用fastjson转成json字符串时,需要过滤掉Java对象中的指定属性,在网上找了一些资料,解决了该问题,具体可以通过本文中介绍的几种方式实现。本文中用到的Java对象结构和使用的对象实例分别如下:对象结构public class Persion { private String id; private String name;原创 2017-03-18 12:40:49 · 10510 阅读 · 1 评论 -
Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
转载自:http://www.cnblogs.com/dolphin0520/p/3920385.html 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须wait()、notify()和notifyAll()是Object类中的方法:释放对临界资源(即队列转载 2016-04-18 18:18:52 · 497 阅读 · 0 评论 -
Java线程与内存模型
一、Java线程与内存的交互关系二、Java线程与内存交互过程说明 Java内存模型的主要目的是定义程序运行中各个变量的访问规则,也即JVM虚拟机将变量存储到内存和从内存读取到变量的底层细节。 这里所说的变量不包括局部变量和传递参数,因为它们均为线程私有变量,不会在线程间共享。 这里所说的变量包括实例变量、类变量等线程共享的变量。1.Java内存模型规定所有的变量都存储在主原创 2016-04-20 13:53:48 · 465 阅读 · 0 评论 -
头插法创建&原地逆置单链表 【Java】
一、头插法创建&原地逆置单链表public class RotateList { public static void main(String[] args) { int [] values = new int[]{1,2,3,4}; Node head = constructList(values); printResult("链表创建后结构:原创 2016-04-23 18:19:02 · 2097 阅读 · 0 评论 -
Java设置Client Socket链接Server超时时间
一、错误示例最近在写socket程序时,偶然发现程序被卡住很长时间,调试后发现是创建Socket时,采用的方式不对:Socket s = new Socket(String host, String port);当采用该方式创建Socket时,默认的链接超时时间为0(A timeout of zero is interpreted as an infinite timeout. The connec原创 2016-09-10 12:03:28 · 12432 阅读 · 0 评论 -
Java 线程池并发编程详解
本博文分为6个部分: 1.BizProcessor:具体的事务处理逻辑,被多线程调用。 2.BizAsyncTaskCall:实现Callable接口,用于组装FutureTask。 3.BizFutureTask:代表一个异步计算任务,用于提交任务异步执行,并返回计算结果。 4.BizExecutor:包含一个ExecutorService,用于执行异步计算任务。 5.完整的测试程序。原创 2016-09-10 13:34:54 · 639 阅读 · 0 评论 -
Java Resource资源path载入解惑
一、问题引入最近使用如下方式载入配置文件时总是返回null:Thread.currentThread().getContextClassLoader().getResource("config.properties") 配置文件说明:config.properties文件放置在与src目录同级的config目录中。二、问题分析查看API文档发现关于类ClassLoader方法getResour原创 2016-10-02 18:01:43 · 4864 阅读 · 2 评论 -
JAVA 一个或多个空格分割字符串
知识补充String的split方法支持正则表达式;正则表达式\s表示匹配任何空白字符,+表示匹配一次或多次。有了以上补充知识,下面的内容就很好理解了。一、待分割字符串待分割字符串为如下:String str = "a b c d e f g"其中,字符串中的的空白分别为:单个空格,多个空格,tab制表符。二、使用一个或多个空格分割字符串正确代码如下:String []原创 2016-10-08 23:01:45 · 59460 阅读 · 10 评论 -
java原生API发送https请求
一、原生API依赖引用注意不要引用错误,否则会引发诡异错误。import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSocketFactory;import javax.net.ssl.TrustManager;import sun.net.www.prot原创 2016-10-25 09:35:16 · 2077 阅读 · 0 评论 -
Java获取可用处理器的数目
一、背景在多线程并发编程时,在创建线程池时,需要指定线程池的最小线程数和最大线程数,这两个数字的指定一般和可用的处理器数目有关,获取可用处理器的数目的Java代码如下:Runtime.getRuntime().availableProcessors()二、示例代码public static void main(String[] args){ int availProcessors =原创 2016-11-22 16:12:02 · 17958 阅读 · 0 评论 -
java的锁机制
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在Java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中等待的某个线程就可以拿到锁执转载 2016-11-23 15:44:17 · 427 阅读 · 0 评论 -
Java邮件发送详解(可发送附件)
发送前需要引用mail-1.4.5.jar,资源下载参见下载链接。一、邮件内容实体类package mail;import java.security.GeneralSecurityException;import java.util.Properties;import com.sun.mail.util.MailSSLSocketFactory;public class MailInfo {原创 2016-11-24 23:12:53 · 16966 阅读 · 1 评论 -
Java日期字符串排序
一、示例代码class test { public static void main (String[] args) throws java.lang.Exception { TreeSet<String> dates = new TreeSet<String>(); dates.add("2016-10-20"); dates.a原创 2016-12-01 15:35:08 · 6856 阅读 · 3 评论 -
Java 远程调试参数说明
一、远程调试时jvm参数设置java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=6789 testR/ServerMain二、参数说明transport:debugee与debuger调试时之间的通讯数据传输方式。 server:是否监听debuger的调试请求。 suspend:是否等待启动,也即设置是否在deb原创 2016-08-19 17:29:39 · 8434 阅读 · 0 评论 -
深入 Java 调试体系,第 4 部分: Java 调试接口(JDI)
JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI),本系列将会详细介绍这三个模块的内部细节、通过实例为读者揭转载 2016-08-06 14:06:17 · 4171 阅读 · 0 评论 -
深入 Java 调试体系,第 3 部分: JDWP 协议及实现
JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI),本系列将会详细介绍这三个模块的内部细节、通过实例为读者揭转载 2016-08-06 13:30:19 · 2664 阅读 · 0 评论 -
JAVA reflect (反射) 分析类结构
一、数据准备Java反射用到的Human类package ReflectAnalysis;public class Human { public String name; private int age; public Human(String name, int age){ this.name = name; this.setAge(age);原创 2016-04-26 13:25:22 · 1267 阅读 · 0 评论 -
synchronized代码块调度
一、结论被synchronized关键字修饰的代码块在执行过程中也可能被调度,也即被sysnchronized修饰的代码块并不是执行完毕后才会被调度。二、结论验证1.用于测试被synchronized修饰的两条语句是否执行完毕后才被调度的runnable.package synchronizedSwitch;import java.util.concurrent.atomic.AtomicInteg原创 2016-05-08 21:57:38 · 639 阅读 · 1 评论 -
Java synchronized详解
仅供学习使用,转载自链接一、使用synchronized在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用。我们首先编写一个非常简单的多线程的程序,是模拟银行中的多个线程同时对同一个储蓄账户进行存款、取款操作的。 在程序中我们使用了一个简化版本的Account类,代转载 2016-05-10 10:40:40 · 617 阅读 · 1 评论