[jstl] 显示 百分数
<fmt:formatNumber value="0.53" type="percent"/>
<fmt:formatNumber value="0.53" type="percent"/>
把一个byte[]数组 变成 字符串,再变回byte[]数组,前后两个数组长度可能不同,即使两次转换使用的是同一种字符集 String content = "朱元璋"; byte[] line = content.getBytes("utf-8"); //长度为9 byte[] subLine = ArrayUtils.subarray(line, 0, 5); //长度为5 new String(subLine,"utf-8").getBytes("utf-8").length; //长度为6 看subLine,本来长度是5,转了一圈之后变成6了
我好土,真的。学用了四五年的JAVA,还从没用过 wait/notify,也不清楚它跟synchronized 关键字 相比有什么好处。今天查了些资料,终于明白了:wait/notify 机制是为了避免轮询带来的性能损失。 为了说清道理,我们用“图书馆借书”这个经典例子来作解释。 一本书同时只能借给一个人。现在有一本书,图书馆已经把这本书借了张三。 在简单的synchrnozed 同步机制下,李四如果想借,先要去图书馆查看书有没有还回来。李四是个心急的人,他每天都去图书馆查;而张三看书看得慢,过了半个月才把书还回来,结果李四在这半个月里全都白跑了,浪费了不少交通车费 而如果使用wait/notify机制,李四就不用白忙了。他第一次去图书馆时发现书已借走,就回家静静等待(wait);张三把书还掉后,通知(notify)李四,李四去图书馆拿书即可。整个过程中,李四没有白跑,没浪费钱。 回到计算机世界: 书 — 临界资源,需互斥地访问 张三,李四 — 两个竞争的线程 坐车去图书馆查书 — 轮询 车费 — CPU空间 等待 — wait 通知下一个借书者 — notify 也就是说,若使用简单的synchonized机制实现互斥,会导致线程主动发起轮询,若N次轮询没有成功,就产生了N次的CPU空间浪费;如果加上了 wait/notify机制,就可以避免这些无谓的轮询,节省CPU的消耗。
一个线程可能不会响应 thread.interrupt()方法。而且,如果线程不响应这个方法,也就不会响应 thread.stop()方法。 所以,这个线程就死不了。
转自 《effective java》
String sDBDriver = "oracle.jdbc.driver.OracleDriver"; String sConnStr = "jdbc:oracle:thin:@192.168.0.58:1521:ORCL";
"朱元璋".getBytes("utf-8").length = 9 "朱元璋".getBytes("GBK").length = 6 "朱元璋".getBytes("ISO8859-1").length = 3 "朱元璋".getBytes().length = 6 //在windows中文版上运行 "朱元璋".getBytes().length = 3 //在SCO UNIX上运行
java api 怎么处理:calendar.add(Calendar.MONTH, 月数) 导致的月末日期溢出问题? 比如 3月31日 加一个月后, 是哪天? 答曰:4月30日 经过多次试验,可以发现: 月数加上之后,如果日期溢出该月最大范围,则自动修正为该月最后一天
一个对象有若干 Property 而 Property = Attribute + Value 比如说:张三 体重70公斤。就可以分解为 体重70公斤 = 体重 + 70公斤 Property = Attribute + Value
这是《java net programming》书中的思想 调用者实现一个监听接口 HelloListener,其中一个方法是getReturnedValue() 被调用者(好线程)一个这个实现了此监听接口的变量作为自己的成员变量,当RUN方法快要完成是,调用这个成员的getReturnedValue()方法