
java
clamaa
这个作者很懒,什么都没留下…
展开
-
Java多线程简单实现取消和进度
Java中简单实现多线程调度时的可取消和显示进度 一个简单的多线程调度实现,统一开始,为了使得所有线程统一开始,类似运动员在听到发令枪时一起进行,使用了CountDownLatch进行控制。CountDownLatch beginLatch = new CountDownLatch(1);CountDownLatch endLatch = new CountDownLatch(pe原创 2017-04-11 09:45:50 · 776 阅读 · 0 评论 -
SimpleDateFormat导致的多线程问题
今天在跑压力测试的过程中,一个看似不可能出错的地方居然报错了,起因在于我们定义的DateUtil工具类,用于将日期进行合理的format以及parse,出现了多线程问题(在单线程时不会出错,只有压测过程中会出现错误)。 代码上分析,原来编写的DateUtil简直是漏洞百出,首先将SimpleDateFormat定义为static变量,这表明在JVM中仅存在一份: private原创 2017-04-11 10:03:14 · 4135 阅读 · 1 评论 -
locale错误导致Java中文乱码错误的总结
线上执行MapReduce任务计算时,经过排查发现了某些服务器计算的数据出现中文乱码问题,但是服务器的配置是完全一致的。由于我们使用的key可能包含中文,中文乱码问题体现在每次合并map记录的时候计算数据的随机性,每次执行的结果都不一样(由于Map任务执分配的随机性)。(注:此文章大部分都参考了同事查找到的问题解决方法。) 在执行Java进程的过程中,通过命令:jinfo+Java进程原创 2017-04-11 09:56:09 · 1586 阅读 · 0 评论 -
设计模式-访问者(Visitor)模式
访问者模式是对象的行为模式。访问者模式的目的是封装施加在某种数据结构元素上的操作。一旦一些操作需要修改,接受这个操作的数据结构可以保持不变。 个人觉得访问者模式相对其他的设计模式来说稍微复杂,难理解一点,要理解这个模式首先需要了解“单分派与多分派”。 单分派与多分派根据对象的类型对执行方法进行选择,就是分派(Dispatch)。分派是面向对象语言提供的关键特性之一,根据分派发生原创 2017-04-11 09:53:36 · 309 阅读 · 0 评论 -
JNI的一个简单实例
本例子使用的操作系统MacOS, 64位JVM。 JNI编写的几个步骤如下: 编写Java代码,并注明native方法: public class HelloJni { public native void displayHelloJni(); public static void main(String[] args) { H原创 2017-04-11 09:53:21 · 271 阅读 · 0 评论 -
准确计算Java中对象的大小
由于在项目中需要大致计算一下对象的内存占用率(Hadoop中的Reduce端内存占用居高不下却又无法解释),因此深入学习了一下如何准确计算对象的大小。 使用system.gc()和java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory()这几个方法测量Java对象的大小,这种方法的优点是数据类型大小无关的,不同的操作系统,都可以得到原创 2017-04-11 09:53:15 · 773 阅读 · 0 评论 -
Java GC日志查看
Java GC类型Java中的GC有哪几种类型? 参数描述UseSerialGC虚拟机运行在Client模式的默认值,打开此开关参数后,使用Serial+Serial Old收集器组合进行垃圾收集。UseParNewGC打开此开关参数后,使用ParNew+Serial Old收集器组合进行垃圾收集。原创 2017-04-11 09:52:30 · 1291 阅读 · 0 评论 -
Java中的GetOpt操作
在shell工具中,有专门的getopt函数,使用方法如下所示:while getopts "d:t:vh" opt; do case "${opt}" in "d") DATE="${OPTARG}" ;; "t") ID="${OPTARG}" ID2=`echo $ID | awk -F原创 2017-04-11 09:52:10 · 1351 阅读 · 0 评论 -
一个简单的Java Web项目搭建流程
今天试图在服务器上搭建一个web服务器,顺便回顾了java web项目的入门,使用Servlet处理HTTP请求,并记录日志等操作。当很久没有做过web项目时,有些东西还是很容易忘记的。 Maven配置使用maven进行整个项目的构建,使用intellij idea IDE,填写完groupId和artifactId之后,声明packaging元素为war包,在build中注意需要原创 2017-04-11 09:51:26 · 5595 阅读 · 0 评论 -
java基础-构建命令行运行的java程序简要注意
今天编写了一个运行在服务端的java工具类,才发现自己以前很少关注运营方面的内容,导致在服务端部署一个java的工具变得异常困难,其实这也是自己对java的了解不够造成的。 首先,当代码编写完成之后,在主类中必须要有main函数,其中的参数非常重要。根据一位同事的说法,除正常的执行程序之外,其中至少要包含两种参数:-v(软件版本,以及作者等介绍信息),-h(软件的帮助信息,良好的帮助文档能原创 2017-04-11 09:51:06 · 273 阅读 · 0 评论 -
String.format(String format, Object… args)总结
JDK1.5中,String类新增了一个很有用的静态方法String.format,这个方法可以简化字符串的输出工作,避免在System.out.println方法和记录Log时代码中出现大量的字符串连接符“+”这种丑陋的代码书写方式,使用指定的格式字符串和参数返回一个格式化字符串,而在System.out.printf方法中也使用了format这种方式输出至console中。 java中原创 2017-04-11 09:50:01 · 1940 阅读 · 0 评论 -
Intellij idea IDE的使用
当前使用的idea版本较低,是11.1.5,高版本默认快捷键与本文中的也比较类似。1. 常用设置 1.1 设置对话框idea中可以使用Setting进行基本IDE的设置,类似eclipse中的Window->Preference。 可以使用快捷键Ctrl+Alt+S,打开设置对话框。1.2 项目属性idea中的Pr原创 2017-04-11 09:48:37 · 2468 阅读 · 0 评论 -
Java NIO学习笔记(下)
摘自并发编程网:http://ifeve.com/overview/仅作自己学习…… 1. FileChannelJava NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileC原创 2017-04-11 09:48:13 · 266 阅读 · 0 评论 -
Java NIO学习笔记(上)
摘自并发编程网:http://ifeve.com/overview/仅作自己学习…… 1. 概述Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors 2. ChannelJava NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道,但流的读写通常是单向的。通道可以异原创 2017-04-11 09:48:06 · 204 阅读 · 0 评论 -
JDK内部工具详解
jps用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,并显示他们的进程号,使用jps时,不需要传递进程号做为参数。 Jps也可以显示远程系统上的JAVA进程,这需要远程服务上开启了jstatd服务,以及RMI注及服务,不过常用都是对本对的JAVA进原创 2017-04-11 09:47:59 · 750 阅读 · 0 评论 -
多线程编程部分总结
最近由于工作的需要,我花时间学习了Java中多线程部分的知识,阅读了《Java Threads 2nd Edition》,虽然第二版比较老,没有最新线程特性中介绍的部分,但是这本书中介绍的多线程知识比较基础,且非常深入,很适合初学多线程并想要深刻了解其中奥妙的程序员阅读。 读完本书后,我的第一感觉就是本书中所介绍的都非常清晰明了,尤其是书中介绍的示例程序都非常有代表性,能够透彻地反映出问题原创 2017-04-11 09:47:52 · 451 阅读 · 0 评论 -
Java数据结构和算法
数据结构是对在计算机内存中(有时候在磁盘中)的数据的一种安排。数据结构包括数组、链表、栈、二叉树、哈希表等等。 数据结构有哪些用途呢?首先,可以模拟现实世界数据的存储,进行现实世界的建模,最重要的数据结构是图,可以用来表示城市之间,城市内部的道路,电路中的连接,或是任务的安排关系;其次,有些数据结构并不打算让用户接触,它们仅被程序本身所使用,程序员经常将诸如栈、队列、优先级队列等结构当作程原创 2017-04-11 09:47:38 · 6882 阅读 · 0 评论 -
JDK1.5到1.7的进化
1. JDK1.51.1 枚举增加了一个关键字enum。 enum非常像public static final int声明,后者作为枚举值已经使用了很多年。对int所做的最大也是最明显的改进是类型安全――您不能错误地用枚举的一种类型代替另一种类型,这一点和 int不同,所有的int对编译器来说都是一样的。除去极少数例外的情况,通常都应该用enum实例替换原创 2017-04-11 09:47:11 · 889 阅读 · 0 评论 -
java中的线程安全与锁优化
Java的线程是映射到操作系统的原生线程之上的,如果要阻塞或唤醒一条线程,都需要操作系统来帮忙完成,这就需要操作系统来帮忙完成,需要从用户态转换到内核态中,状态转换需要耗费很多的处理器时间。如果是非常简单的代码同步块,状态转换消耗的时间可能比用户代码执行的时间还要长。 因此可以说,synchronized是Java语言中的一个重量级操作,对于有经验的程序员都会在确实必要的情况下才使用这原创 2017-04-11 10:03:39 · 489 阅读 · 0 评论