Java

volatile的例子

package player.kent.chen.learn.hivolatile; /** * 循环直到有人喊停 */ public class LoopUntilCommand { private boolean stop; /** * 循环直到有人喊停 */ public void loop() { while (!stop) { ; } System.out.println("Stopped because somebody said so"); } /** * 喊停 */ public void sayStop() { stop = true; } public static void main(String[] args) throws InterruptedException { final LoopUntilCommand luc …

volatile的例子 Read More »

代码示例:java.util.concurrent.locks.Lock

import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @author kent 2013-3-11上午11:55:28 */ public class PlayLock implements Runnable { private Bean bean; public PlayLock(Bean bean) { super(); this.bean = bean; } public void run() { for (int j = 0; j < 100; j++) { bean.increment(); } } private static final class Bean { private int i = …

代码示例:java.util.concurrent.locks.Lock Read More »

以填酒、喝酒为例说明线程同步:阻塞、死锁、非阻塞、Notify/Wait机制

一个填酒线程,一个喝酒线程对一个酒杯轮流进行操作。 阻塞、死锁 package player.kent.chen.learn.threads.notify; /** * 酒杯 * * @author kent 2013-3-11下午4:34:30 */ public class Cup { private volatile boolean empty = true; /** * 填酒,阻塞式地 * * @author kent 2013-3-11下午4:59:33 */ public synchronized void fill() { while (!empty) { //若酒杯不为空则等待 ; } doFill(); } /** * 清空酒杯,阻塞式地 * * @author kent 2013-3-11下午4:59:50 */ public …

以填酒、喝酒为例说明线程同步:阻塞、死锁、非阻塞、Notify/Wait机制 Read More »

JAVA虚拟机内存结构与物理机器进程内存结构的对应

JAVA虚拟机是一台“计算机”,它的内存结构跟物理机进程的内存结构有点类似: PC Register: 相当于普通进程中Text段中的PC值 VM Stack: 相当于普通进程中的Stack Heap:     相当于普通进程中的Heap Method Area:   相当于普通进程中的Text段(指令), 和Static Data(常量、静态变量) 以上对应关系都是模糊的,只是让你对JVM内存结构有个感性的认识

jmimemagic: 找出文件的MIMIE类型

jmimemagic这个开源软件可以让你用java语言找出某个文件的MIME类型 比如,判断文件是不是文本文件。 private boolean isTextFile(File file) { MagicMatch magic = Magic.getMagicMatch(file, false, true); String mimeType = magic.getMimeType().toLowerCase(); return mimeType.startsWith("text/"); }

使用fastjson往浏览器输出字符串时应使用的参数

使用fastjson往浏览器输出字符串时,应该在调用fastjson API时使用以下两个参数: 1. SerializerFeature.DisableCircularReferenceDetect 2. SerializerFeature.BrowserCompatible 如果不使用第1个参数且传入的对象中有小对象被引用两次(比如map中两个key共用一个value对象),就可能导致输出的json中出现$ref等字样 如果不使用第2个参数,则有可能出现浏览器兼容问题

java正则”组”例子

String accessRegex = ".*userNameId\\-(\\d+).*"; String text = "2012-10-26 14:41:30,748 userNameId-777 from IP-10.232.25.144 invoked URL-http://xxx/hello.jsonp"; Pattern pattern = Pattern.compile(accessRegex); Matcher matcher = pattern.matcher(text); if (matcher.find()) { System.out.println(matcher.group(1)); }