??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV成人精品网站在线播放,亚洲区日韩精品中文字幕,久久久亚洲精品蜜桃臀http://www.tkk7.com/ldwblog/category/38803.html态度军_一?/description>zh-cnTue, 07 Jan 2020 10:49:22 GMTTue, 07 Jan 2020 10:49:22 GMT60个h公众受Java爱好者社区」高质量原创文章持箋输出Q欢q各位小d?/title><link>http://www.tkk7.com/ldwblog/archive/2019/10/30/434887.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Wed, 30 Oct 2019 06:10:00 GMT</pubDate><guid>http://www.tkk7.com/ldwblog/archive/2019/10/30/434887.html</guid><wfw:comment>http://www.tkk7.com/ldwblog/comments/434887.html</wfw:comment><comments>http://www.tkk7.com/ldwblog/archive/2019/10/30/434887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ldwblog/comments/commentRss/434887.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ldwblog/services/trackbacks/434887.html</trackback:ping><description><![CDATA[blogjava|站与博客园合ƈ了,对blogjavaq是有感情的?br />q且blogjava|站发布的文章是在博客园首页看不到的?br />blogjava|站首页能看刎ͼ你可以点L题进入可以看到图片二l码信息?br /><br /><strong style="color: red; font-size: 14pt;">Java爱好者社?/strong><br />公众号内容简介:<br /><p><span style="background-color: yellow; color: red;">专注于分享Java后端相关技术、老司机实战干货,不限于JVM、ƈ发、设计模式、性能优化、分布式&微服务、云原生、大数据相关主题?/span><br style="color: red;" /><span style="background-color: yellow; color: red;">希望x的你停下脚步Q定有所收获?/span><br style="color: red;" /><br />以前的个人博客内容不好迁U,所以我打算Ҏ自己的多q经验,不断整理输出有h值的内容?br />目前公众号内Ҏ关于<span style="background-color: yellow; color: red;">SpringCloudQ微服务框架Q、SkywalkingQAPM监控调用链)、JVMQGC分析、内存泄漏分析)、ƈ发编E?/span>相关原创实战文章已出炉?br /><br />最q刚开始已l有不少伙伴关注了Q期待能有幸搜烦到本博客的同学,可以扫码x一下,不胜感激?br />大家有Q何技术、职场、面试上的问题都可以与我交流?br /><br /><span style="background-color: yellow;"><strong>方式一Q?/strong></span><span style="color: red; background-color: yellow;"><strong>扫码以下公众号二l码Q?/strong></span><br /><img src="http://www.tkk7.com/images/blogjava_net/ldwblog/Java%E7%88%B1%E5%A5%BD%E8%80%85%E7%A4%BE%E5%8C%BA%E4%BA%8C%E7%BB%B4%E7%A0%81.png" border="0" alt="" /><br /><br />方式二:<span style="color: red;">在微信上直接搜烦Q?nbsp;</span><span style="color: red; background-color: yellow;">javatech_cbo</span><br /><br />感谢各位伙伴的支持Q后l会在该公众号上输出大量的有价值的实战q货 Q期待与你一同进步与成长?br /></p><img src ="http://www.tkk7.com/ldwblog/aggbug/434887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ldwblog/" target="_blank">David1228</a> 2019-10-30 14:10 <a href="http://www.tkk7.com/ldwblog/archive/2019/10/30/434887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Linux与JVM的内存关pd?/title><link>http://www.tkk7.com/ldwblog/archive/2017/09/04/432799.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Mon, 04 Sep 2017 08:33:00 GMT</pubDate><guid>http://www.tkk7.com/ldwblog/archive/2017/09/04/432799.html</guid><wfw:comment>http://www.tkk7.com/ldwblog/comments/432799.html</wfw:comment><comments>http://www.tkk7.com/ldwblog/archive/2017/09/04/432799.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ldwblog/comments/commentRss/432799.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ldwblog/services/trackbacks/432799.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.tkk7.com/ldwblog/archive/2017/09/04/432799.html'>阅读全文</a><img src ="http://www.tkk7.com/ldwblog/aggbug/432799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ldwblog/" target="_blank">David1228</a> 2017-09-04 16:33 <a href="http://www.tkk7.com/ldwblog/archive/2017/09/04/432799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java IO与NIO技术体pd?/title><link>http://www.tkk7.com/ldwblog/archive/2017/08/02/432714.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Wed, 02 Aug 2017 03:41:00 GMT</pubDate><guid>http://www.tkk7.com/ldwblog/archive/2017/08/02/432714.html</guid><wfw:comment>http://www.tkk7.com/ldwblog/comments/432714.html</wfw:comment><comments>http://www.tkk7.com/ldwblog/archive/2017/08/02/432714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ldwblog/comments/commentRss/432714.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ldwblog/services/trackbacks/432714.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.tkk7.com/ldwblog/archive/2017/08/02/432714.html'>阅读全文</a><img src ="http://www.tkk7.com/ldwblog/aggbug/432714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ldwblog/" target="_blank">David1228</a> 2017-08-02 11:41 <a href="http://www.tkk7.com/ldwblog/archive/2017/08/02/432714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Elasticsearch服务重启故障解决q程http://www.tkk7.com/ldwblog/archive/2017/07/24/432681.htmlDavid1228David1228Mon, 24 Jul 2017 11:10:00 GMThttp://www.tkk7.com/ldwblog/archive/2017/07/24/432681.htmlhttp://www.tkk7.com/ldwblog/comments/432681.htmlhttp://www.tkk7.com/ldwblog/archive/2017/07/24/432681.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/432681.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/432681.html阅读全文

David1228 2017-07-24 19:10 发表评论
]]>
JAVA应用CPU占用100%|内存泄漏分析ȝhttp://www.tkk7.com/ldwblog/archive/2016/12/22/432166.htmlDavid1228David1228Thu, 22 Dec 2016 15:01:00 GMThttp://www.tkk7.com/ldwblog/archive/2016/12/22/432166.htmlhttp://www.tkk7.com/ldwblog/comments/432166.htmlhttp://www.tkk7.com/ldwblog/archive/2016/12/22/432166.html#Feedback2http://www.tkk7.com/ldwblog/comments/commentRss/432166.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/432166.html阅读全文

David1228 2016-12-22 23:01 发表评论
]]>
CPU利用?00%定位q程http://www.tkk7.com/ldwblog/archive/2016/11/04/431955.htmlDavid1228David1228Fri, 04 Nov 2016 15:44:00 GMThttp://www.tkk7.com/ldwblog/archive/2016/11/04/431955.htmlhttp://www.tkk7.com/ldwblog/comments/431955.htmlhttp://www.tkk7.com/ldwblog/archive/2016/11/04/431955.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/431955.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/431955.html阅读全文

David1228 2016-11-04 23:44 发表评论
]]>
jstack Dump 日志文g中的U程状?/title><link>http://www.tkk7.com/ldwblog/archive/2016/07/28/431364.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Thu, 28 Jul 2016 09:57:00 GMT</pubDate><guid>http://www.tkk7.com/ldwblog/archive/2016/07/28/431364.html</guid><wfw:comment>http://www.tkk7.com/ldwblog/comments/431364.html</wfw:comment><comments>http://www.tkk7.com/ldwblog/archive/2016/07/28/431364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ldwblog/comments/commentRss/431364.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ldwblog/services/trackbacks/431364.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.tkk7.com/ldwblog/archive/2016/07/28/431364.html'>阅读全文</a><img src ="http://www.tkk7.com/ldwblog/aggbug/431364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ldwblog/" target="_blank">David1228</a> 2016-07-28 17:57 <a href="http://www.tkk7.com/ldwblog/archive/2016/07/28/431364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] JVM调优ȝ + jstat 分析http://www.tkk7.com/ldwblog/archive/2016/01/03/428906.htmlDavid1228David1228Sun, 03 Jan 2016 15:26:00 GMThttp://www.tkk7.com/ldwblog/archive/2016/01/03/428906.htmlhttp://www.tkk7.com/ldwblog/comments/428906.htmlhttp://www.tkk7.com/ldwblog/archive/2016/01/03/428906.html#Feedback2http://www.tkk7.com/ldwblog/comments/commentRss/428906.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/428906.html阅读全文

David1228 2016-01-03 23:26 发表评论
]]>
Thrift RPC框架介绍http://www.tkk7.com/ldwblog/archive/2014/12/03/421011.htmlDavid1228David1228Wed, 03 Dec 2014 15:56:00 GMThttp://www.tkk7.com/ldwblog/archive/2014/12/03/421011.htmlhttp://www.tkk7.com/ldwblog/comments/421011.htmlhttp://www.tkk7.com/ldwblog/archive/2014/12/03/421011.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/421011.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/421011.html阅读全文

David1228 2014-12-03 23:56 发表评论
]]>
Maven及NexusU服搭徏http://www.tkk7.com/ldwblog/archive/2013/11/19/406529.htmlDavid1228David1228Tue, 19 Nov 2013 03:48:00 GMThttp://www.tkk7.com/ldwblog/archive/2013/11/19/406529.htmlhttp://www.tkk7.com/ldwblog/comments/406529.htmlhttp://www.tkk7.com/ldwblog/archive/2013/11/19/406529.html#Feedback1http://www.tkk7.com/ldwblog/comments/commentRss/406529.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/406529.html阅读全文

David1228 2013-11-19 11:48 发表评论
]]>
源代码分析之HashMaphttp://www.tkk7.com/ldwblog/archive/2013/11/18/406488.htmlDavid1228David1228Mon, 18 Nov 2013 10:01:00 GMThttp://www.tkk7.com/ldwblog/archive/2013/11/18/406488.htmlhttp://www.tkk7.com/ldwblog/comments/406488.htmlhttp://www.tkk7.com/ldwblog/archive/2013/11/18/406488.html#Feedback4http://www.tkk7.com/ldwblog/comments/commentRss/406488.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/406488.html阅读全文

David1228 2013-11-18 18:01 发表评论
]]>
分n一道Java面试?/title><link>http://www.tkk7.com/ldwblog/archive/2013/10/31/405857.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Thu, 31 Oct 2013 09:32:00 GMT</pubDate><guid>http://www.tkk7.com/ldwblog/archive/2013/10/31/405857.html</guid><wfw:comment>http://www.tkk7.com/ldwblog/comments/405857.html</wfw:comment><comments>http://www.tkk7.com/ldwblog/archive/2013/10/31/405857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ldwblog/comments/commentRss/405857.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ldwblog/services/trackbacks/405857.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.tkk7.com/ldwblog/archive/2013/10/31/405857.html'>阅读全文</a><img src ="http://www.tkk7.com/ldwblog/aggbug/405857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ldwblog/" target="_blank">David1228</a> 2013-10-31 17:32 <a href="http://www.tkk7.com/ldwblog/archive/2013/10/31/405857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详解Java GC的工作原?Minor GC、FullGChttp://www.tkk7.com/ldwblog/archive/2013/07/24/401919.htmlDavid1228David1228Wed, 24 Jul 2013 08:11:00 GMThttp://www.tkk7.com/ldwblog/archive/2013/07/24/401919.htmlhttp://www.tkk7.com/ldwblog/comments/401919.htmlhttp://www.tkk7.com/ldwblog/archive/2013/07/24/401919.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/401919.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/401919.html阅读全文

David1228 2013-07-24 16:11 发表评论
]]>
Q{Q定时且周期性的d研究I--Timer ---- d研究II--ScheduledThreadPoolExecutorhttp://www.tkk7.com/ldwblog/archive/2013/03/18/396615.htmlDavid1228David1228Mon, 18 Mar 2013 10:58:00 GMThttp://www.tkk7.com/ldwblog/archive/2013/03/18/396615.htmlhttp://www.tkk7.com/ldwblog/comments/396615.htmlhttp://www.tkk7.com/ldwblog/archive/2013/03/18/396615.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/396615.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/396615.html阅读全文

David1228 2013-03-18 18:58 发表评论
]]>
设计模式之Composite模式http://www.tkk7.com/ldwblog/archive/2012/10/12/389470.htmlDavid1228David1228Fri, 12 Oct 2012 08:20:00 GMThttp://www.tkk7.com/ldwblog/archive/2012/10/12/389470.htmlhttp://www.tkk7.com/ldwblog/comments/389470.htmlhttp://www.tkk7.com/ldwblog/archive/2012/10/12/389470.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/389470.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/389470.html假设您今天要开发一个动ȝ辑程式,动画由媄|FrameQ组成,C影格l合为动L单,动画清单也可以由其它已完成的动画清单l成Q也可以在动L单与清单之间加入个别影格。无论是影格或动L单都可以播放Q而动L单负责的是l合影格或动L单,所以可以这么设计:




对于Frame而言QPlaylist是一个容器,然而Playlist也实作PlayableQ所以它也可以播放,您可以进一步地Playlistl合臛_一个Playlist中,以Ş成更长的播放清单。以Java实现的话?br />以Java實現的話?br />
import java.util.*;

interface Playable {
void play();
}

class Frame implements Playable {
private String image;
Frame(String image) {
this.image = image;
}
public void play() {
System.out.println("播放 " + image);
}
}

class Playlist implements Playable {
private List<Playable> list = new ArrayList<Playable>();
public void add(Playable playable) {
list.add(playable);
}
public void play() {
for(Playable playable : list) {
playable.play();
}
}
}

public class Main {
public static void main(String[] args) {
Frame logo = new Frame("片頭 LOGO");

Playlist playlist1 = new Playlist();
playlist1.add(new Frame("Duke 左揮?));
playlist1.add(new Frame("Duke x?));

Playlist playlist2 = new Playlist();
playlist2.add(new Frame("Duke 走左?));
playlist2.add(new Frame("Duke 走右?));

Playlist all = new Playlist();
all.add(logo);
all.add(playlist1);
all.add(playlist2);

all.play();
}
}

以Python實現的話Q?br />
class Frame:
def __init__(self, image):
self.image = image
def play(self):
print("播放 " + self.image)

class Playlist:
def __init__(self):
self.list = []
def add(self, playable):
self.list.append(playable);
def play(self):
for playable in self.list:
playable.play()

logo = Frame("片頭 LOGO")

playlist1 = Playlist()
playlist1.add(Frame("Duke 左揮?))
playlist1.add(Frame("Duke x?))

playlist2 = Playlist()
playlist2.add(Frame("Duke 走左?))
playlist2.add(Frame("Duke 走右?))

all = Playlist()
all.add(logo)
all.add(playlist1)
all.add(playlist2)

all.play();以UML来表CComposite模式的结构:



h层次性或l合性的物g可以使用Composite模式Q像是电路元件、视H元件等Q用Composite模式可以大大减低q些元g设计的复杂度Q以Java标准API中AWT视窗元gZQ?/small>Component上有个paint()ҎQ可以进行元件的l制Q?/small>Container可以容纳ComponentQ如Button、Label{)Q而Containerl承ComponentQ所以Container也可以容UContainerQ这也是Composite模式的实际例子:
 

from Q?nbsp;http://caterpillar.onlyfun.net/Gossip/index.html 





David1228 2012-10-12 16:20 发表评论
]]>
Queuehttp://www.tkk7.com/ldwblog/archive/2012/03/19/372191.htmlDavid1228David1228Mon, 19 Mar 2012 06:45:00 GMThttp://www.tkk7.com/ldwblog/archive/2012/03/19/372191.htmlhttp://www.tkk7.com/ldwblog/comments/372191.htmlhttp://www.tkk7.com/ldwblog/archive/2012/03/19/372191.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/372191.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/372191.html

在Set中有一个排序的集合SortedSetQ用来保存按照自焉序排列的对象。Queue中同样引入了一个支持排序的FIFO模型?/p>

q发队列与Queue?/a> 中介l了QPriorityQueue和PriorityBlockingQueue是支持排序的Queue。显然一个支持阻塞的排序Queue要比一 个非U程安全的Queue实现h要复杂的多,因此下面只介lPriorityBlockingQueueQ至于PriorityQueue只需要去?Blocking功能基本相同了?/h4>

 转自: http://www.tkk7.com/xylz/archive/2010/07/30/327582.htm

排序的BlockingQueue — PriorityBlockingQueue

先简单介l下PriorityQueueQ因为PriorityBlockingQueue内部是通过PriorityQueue适配实现的,只不q通过锁进行同步和d而已?/p>

PriorityQueue是一个数l实现的Q是一个二叉树的实玎ͼq个二叉树的L一个节炚w比其子节点要,q样点是最的节点。每一个元 素或者节点要么本w是可比较的QComparableQ,或者队列本w带有一个比较器QComparator<? super E>Q,所有元素就是靠比较自n的大来定序的。而数l中点是数组的第0个元素,因此出队列的话L取第0个元素。对于第0个元素,其子?ҎW?个元素和W?个元素,对于W?个元素,其子元素又是W?/4个元素,以此cLQ第i个元素的父节点就?i-1)/2。这样Q意一个元素加入队?׃其父节点(i-1)/2开始比较,一旦新节点比父节点就交换两个节点Q然后l比较新节点与其新的父节炏V知道所有节炚w是按照父节点一定比子节?的序排列。这是一个有点复杂的法Q此处不再讨论更多的l节。不是删除q是查找Q我们只需要了解的点Q烦引ؓ0的元素)L最的?/p>

特别需要说明的是PriorityQueue是一个无界的队列Q也是说一旦元素的个数辑ֈ了数l的大小Q那么就数l扩?0%Q这栯个数l就是无I大的。当然了如果辑ֈ了整数的最大值就会得C个OutOfMemoryErrorQ这个是由逻辑保证的?/p>

 

对于PriorityBlockingQueue而言Q由于是无界的,因此只有非I的信号Q也是说只有take()才能dQput是永q不会阻塞(除非辑ֈInteger.MAX_VALUE直到抛出一个OutOfMemoryError异常Q?/p>

只有take()操作的时候才可能因ؓ队列为空而挂赗同时其它需要操作队列变化和大小的只需要用独占锁ReentrantLock可以了Q非常方ѝ需要说明的是PriorityBlockingQueue采用了一个公q的锁?/p>

 

ȝ来说PriorityBlockingQueue 不是一个FIFO的队列,而是一个有序的队列Q这个队列L?#8220;自然序”最的对象Q同时又是一个只能出队列d的BlockingQueueQ对于入队列却不是阻塞的。所有操作都是线E安全的?/p>

 

直接交换的BlockingQueue — SynchronousQueue

 

q是一个很有意思的d队列Q其中每个插入操作必ȝ待另一个线E的U除操作Q同样Q何一个移除操作都{待另一个线E的插入操作。因此此队列内部?实没有Q何一个元素,或者说定w?Q严Dq不是一U容器。由于队列没有容量,因此不能调用peek操作Q因为只有移除元素时才有元素?/p>

一个没有容量的q发队列有什么用了?或者说存在的意义是什么?

SynchronousQueue 的实现非常复杂,当然了如果真要去分析q是能够得到一些经验的Q但是前面分析了q多的结构后Q发现越来越陷于数据l构与算法里面了。我的初h通过研究q?发实现的原理来更好的利用q发来最大限度的利用可用资源。所以在后面的章节中可能的研I数据结构和法Q但是ؓ了弄清楚里面的原理,必不可免的会涉及 C些这斚w的知识,希望后面能够适可而止?/p>

再回到话题。SynchronousQueue 内部没有定wQ但是由于一个插入操作L对应一个移除操作,反过来同样需要满뀂那么一个元素就不会再SynchronousQueue 里面长时间停留,一旦有了插入线E和U除U程Q元素很快就从插入线E移交给U除U程。也是说这更像是一U信道(道Q,资源从一个方向快速传递到另一?向?/p>

需要特别说明的是,管元素在SynchronousQueue 内部不会“停留”Q但是ƈ不意味之SynchronousQueue 内部没有队列。实际上SynchronousQueue l护者线E队列,也就是插入线E或者移除线E在不同时存在的时候就会有U程队列。既然有队列Q同样就有公qx和非公qx特性,公^性保证正在等待的插入U?E或者移除线E以FIFO的顺序传递资源?/p>

昄q是一U快速传递元素的方式Q也是说在q种情况下元素L以最快的方式从插入着Q生产者)传递给U除着Q消费者)Q这在多d队列中是最快处理Q务的方式。在U程池的相关章节中还会更多的提到此特性?/p>

 

事实上在?a href="../../xylz/archive/2010/07/21/326723.html">q发队列与Queue?/a>?中介l了q有一UBlockingQueue的实现DelayQueueQ它描述的是一Ug旉列。这个队列的Ҏ是Q队列中的元素都要gq时_时?_Q只有一个元素达C延时旉才能出队列,也就是说每次从队列中获取的元素L最先到辑֚g时的元素。这U队列的场景是计划d。比如以前要完成计划 dQ很有可能是使用Timer/TimerTaskQ这是一U@环检的方式Q也是在@环里面遍历所有元素L元素是否满xӞ一旦满x件就 执行相关d。显然这中方式浪费了很多的检工作,因ؓ大多数时间L在进行无谓的。而DelayQueue 却能避免q种无谓的检。在U程池的计划d部分q有更加详细的讨论此队列实现?/p>

 

下面对常见的BlockingQueueq行节下,q里不包括双向的队列Q尽ConcurrentLinkedQueue不是可阻塞的QueueQ但是这里还是将其放在一赯行对比?/p>

 

q发队列比较

如果不需要阻塞队列,优先选择ConcurrentLinkedQueueQ如果需要阻塞队列,队列大小固定优先选择 ArrayBlockingQueueQ队列大不固定优先选择LinkedBlockingQueueQ如果需要对队列q行排序Q选择 PriorityBlockingQueueQ如果需要一个快速交换的队列Q选择SynchronousQueueQ如果需要对队列中的元素q行延时?作,则选择DelayQueue?/p>

David1228 2012-03-19 14:45 发表评论
]]>public static void main(String[] args){}函数诠释http://www.tkk7.com/ldwblog/archive/2010/08/30/330301.htmlDavid1228David1228Mon, 30 Aug 2010 08:15:00 GMThttp://www.tkk7.com/ldwblog/archive/2010/08/30/330301.htmlhttp://www.tkk7.com/ldwblog/comments/330301.htmlhttp://www.tkk7.com/ldwblog/archive/2010/08/30/330301.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/330301.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/330301.html  public static void main(String[] args){…}

  下面分别解释q些关键字的作用Q?/p>

  Q?Qpublic关键字,q个好理解,声明dCؓpublic是告诉其他的类可以讉Kq个函数?/p>

  Q?Qstatic关键字,告知~译器main函数是一个静态函数。也是说main函数中的代码是存储在静态存储区的,卛_定义了类以后q段代码已l存在了。如果main()Ҏ没有使用static修饰W,那么~译不会出错Q但是如果你试图执行该程序将会报错,提示main()Ҏ不存在。因为包含main()的类q没有实例化Q即没有q个cȝ对象Q,所以其main()Ҏ也不会存。而用static修饰W则表示该方法是静态的Q不需要实例化卛_使用?/p>

  Q?Qvoid关键字表明main()的返回值是无类型?/p>

  **Q?Q参数String[] argsQ这是本文的重点?/p>

  W一、程序用者可以在命o行状态下向某个类传递参数。看下面的例子:

  public class ArgsDemo {

  public static void main(String[] args) {

  String str = new String();

  for (int i = 0; i < args.length; i++) {

  System.out.println(args[i]);

  str += args[i];

  }

  System.out.println(str);

  }

  }

  使用javac ArgsDemo.java命o生成ArgsDemo.class文gQ然后?#8220;java ArgsDemo 参数一 参数?参数?…”的格式向ArgsDemocM递参数。该CZE序首先输出参敎ͼ然后输出所有参数的和。比如java ArgsDemo a b c,得到这L输出Q?/p>

  a

  b

  c

  abc

  需要注意的是,如果q里的@环条件不是i <args.lengthQ而是i <5Q则在命令行中输入的参数必须?个,否则会报错Q错误类型ؓQ?/p>

  Exception in thread “main” java.lang.ArrayIndexOutOfBoundException:3

  at ArgsDemo.main(ArgsDemo.java:5)

  W二、可以在另一个类中向包含main()的类传递参敎ͼ如下例:

  public class A {

  public static void main(String[] args)

  {

  for(int i=0;i <args.length;i++)

  System.out.println(args[i]);

  }

  }

  public class B {

  public static void main(String[] args)

  {

  c = new A();

  String[] b = {"111","222","333"};

  c.main(b);

  }

  }

  首先定义一个class AQ在A中定义一个main()函数Q在该函C输出参数args。然后定义一个classBQ在B中初始化一个A的实例cQ然后向c传递参敎ͼq且调用c的mainҎ打印Z入的参数倹{输出结果如下:

  111

  222

  333

  ׃main()函数是静态函敎ͼ即不需要实例化也能使用Q所以B使用下面的写法也能完成相同的功能Q?/p>

  public class B {

  public static void main(String[] args)

  {

  //A c = new A();

  String[] b = {"111","222","333"};

  A.main(b);

  }

  }

  ȝQ参数args的主要作用是为程序用者在命o行状态下与程序交互提供了一U手Dc此外在其他cM直接使用main()函数Qƈ传递参C是可行的Q虽然这U方法不太常用,但毕竟ؓ我们提供了一U选择?/p>

David1228 2010-08-30 16:15 发表评论
]]>
获取执行旉D늚工作日和周末.....http://www.tkk7.com/ldwblog/archive/2010/08/30/330271.htmlDavid1228David1228Mon, 30 Aug 2010 05:52:00 GMThttp://www.tkk7.com/ldwblog/archive/2010/08/30/330271.htmlhttp://www.tkk7.com/ldwblog/comments/330271.htmlhttp://www.tkk7.com/ldwblog/archive/2010/08/30/330271.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/330271.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/330271.html   * 获取指定日期之间的所有日期list 工作日和周末
  * @param start
  * @param end
  * @return List<List>
  */
 private  Map getDaysMap(Date start,Date end){
  Map rsmap = new HashMap();
  List gzrList = new ArrayList();//工作?br />   List zmList = new ArrayList();//周末
  
  long ldays = 0;
  if(start!=null && end!=null){
   Calendar c = Calendar.getInstance();
   c.setTime(start);
   c.set(Calendar.HOUR_OF_DAY, 0);
   c.set(Calendar.MINUTE, 0);
   c.set(Calendar.SECOND, 0);
   c.set(Calendar.MILLISECOND, 0);
   start = c.getTime();
   
   //
   c.setTime(end);
   c.set(Calendar.HOUR_OF_DAY, 23);
   c.set(Calendar.MINUTE, 59);
   c.set(Calendar.SECOND, 59);
   c.set(Calendar.MILLISECOND, 999);
   end = c.getTime();
   DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   if(start.getTime()<=end.getTime()){
    //判断盔R的天?br />     ldays = (end.getTime()-start.getTime())/(1000*24*60*60) + 1;
    for(int i=0;i<ldays;i++)
    {
     Date d = getNextDay(start,i);
     String str = df.format(d);
     System.out.print(str);
     c.setTime(d);
     int dw = c.get(Calendar.DAY_OF_WEEK);
     if(dw==Calendar.SUNDAY || dw==Calendar.SATURDAY){
      zmList.add(transToStr(d));
      System.out.println(" 周末");
     }
     else{
      gzrList.add(transToStr(d));
      System.out.println(" 工作?);
     }
    }
   }
  }
  
  rsmap.put("1", gzrList);
  rsmap.put("2", zmList);
  return rsmap;
 }

David1228 2010-08-30 13:52 发表评论
]]>
查找2个有序整数数l的合集http://www.tkk7.com/ldwblog/archive/2010/08/23/329636.htmlDavid1228David1228Mon, 23 Aug 2010 03:37:00 GMThttp://www.tkk7.com/ldwblog/archive/2010/08/23/329636.htmlhttp://www.tkk7.com/ldwblog/comments/329636.htmlhttp://www.tkk7.com/ldwblog/archive/2010/08/23/329636.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/329636.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/329636.html
  •  
    1. /**  
    2.  * 查找2个有序整数数l的合集  
    3.  *   
    4.  * @author Java?javaren.org)  
    5.  */  
    6. public class TestRetainAll {   
    7.   public static void main(String[] args) {   
    8.     int[] a = { 15810141517182022242528 };   
    9.     int b[] = { 24681012 };   
    10.     int i = 0;   
    11.     int j = 0;   
    12.     while (i < a.length && j < b.length) {   
    13.       if (a[i] < b[j]) {   
    14.         i++;   
    15.       } else if (a[i] == b[j]) {   
    16.         System.out.println(a[i]);   
    17.         i++;   
    18.         j++;   
    19.       } else {   
    20.         j++;   
    21.       }   
    22.     }   
    23.   }   
    24. }  
    ~


  • David1228 2010-08-23 11:37 发表评论
    ]]>
    JVM沙箱&框架http://www.tkk7.com/ldwblog/archive/2010/08/17/329074.htmlDavid1228David1228Tue, 17 Aug 2010 02:35:00 GMThttp://www.tkk7.com/ldwblog/archive/2010/08/17/329074.htmlhttp://www.tkk7.com/ldwblog/comments/329074.htmlhttp://www.tkk7.com/ldwblog/archive/2010/08/17/329074.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/329074.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/329074.htmlRMI|唆得太多了Q实在是力x它说清楚Q希望对大家有帮助。最后的最后,l大家简单讲一下JVM框架Q我们叫做Java沙箱。Java沙箱的基本组件如下:
    a) c装载器l构
    b) class文g验器
    c) 内置于Java虚拟机的安全Ҏ?br /> d) 安全理器及Java API

    其中c装载器?个方面对Java沙箱起作用:
    a. 它防止恶意代码去q涉善意的代?br /> b. 它守护了被信ȝcd边界
    c. 它将代码归入保护域,定了代码可以进行哪些操?br />
    虚拟Zؓ不同的类加蝲器蝲入的cL供不同的命名I间Q命名空间由一pd唯一的名U组成,每一个被装蝲的类有一个名字,q个命名I间是由Java虚拟Zؓ每一个类装蝲器维护的Q它们互怹间甚至不可见?br />
    我们常说的包QpackageQ是在Java虚拟机第2版的规范W一ơ出玎ͼ正确定义是由同一个类装蝲器装载的、属于同一个包、多个类型的集合。类装蝲器采用的机制是双亲委z模式。具体的加蝲器框架我在Java杂谈Q一Q中已经解释q了Q当时说最外层的加载器是AppClassLoaderQ其实算上网l层的话AppClassLoader也可以作为parentQ还有更外层的加载器URLClassLoader。ؓ了防止恶意攻ȝURL加蝲q来的类文g我们当然需要分不同的访问命名空_q且制定最安全的加载次序,单来说就是两点:

    a. 从最内层JVM自带cd载器开始加载,外层恶意同名cd不到先加载而无法?br /> b. ׃严格通过包来区分了访问域Q外层恶意的c通过内置代码也无法获得权限访问到内层c,破坏代码p然无法生效?br />
    附:关于Java的^台无x,有一个例子可以很明显的说明这个特性:
    一般来_C或C++中的int占位宽度是根据目标^台的字长来决定的Q这意味着针对不同的^台编译同一个C++E序在运行时会有不同的行为。然而对?Java中的int都是32位的二进制补码标识的有符h敎ͼ而float都是遵守IEEE 754点标准?2位QҎ?br />
    PS: q个弟最q也没时间l研I下MQ只是想抛砖引玉的提供给大家一个初步认识JVM的印象。有Z了解一下JVM的内部结构对今后做Java开发是很有好处的?/font>


    David1228 2010-08-17 10:35 发表评论
    ]]>
    Java中的RMI机制http://www.tkk7.com/ldwblog/archive/2010/08/17/329072.htmlDavid1228David1228Tue, 17 Aug 2010 02:30:00 GMThttp://www.tkk7.com/ldwblog/archive/2010/08/17/329072.htmlhttp://www.tkk7.com/ldwblog/comments/329072.htmlhttp://www.tkk7.com/ldwblog/archive/2010/08/17/329072.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/329072.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/329072.html
    q程Ҏ调用是EJB实现的支柱,建立分布式应用的核心思想。这个很好理解,再拿上面的计加法例子,A只知道去call计算机B的方法,自己q没有B的那些功能,所以A计算机端无法看到B执行q段功能的过E和代码Q因为看都看不到Q所以既没有ZH取也没有机会去改动Ҏ代码。EJB正式Zq样的思想来完成它的Q务的。当单的加法变成复杂的数据库操作和电子商务交易应用的时候,q样的安全性和分布式应用的便利性就表现出来优势了?br />
    好了Q回到细节上Q要如何实现q程Ҏ调用呢?我希望大家学习Q何技术的时候可以试着依赖自己的下意识判断Q只要你的想法是合理健壮的,那么很可能实际上它就是这么做的,毕竟真理都蕴藏在q_的生zȝ节中。这样只要带着一些薄qJava基础来思考RMIQ其实也可以惛_个大概来?br />
    a) 需要有一个服务器角色Q它拥有真正的功能代码方法。例如BQ它提供加法服务
    b) 如果惌E用B的功能,需要知道B的IP地址
    c) 如果惌E用B的功能,q需要知道B中那个特定服务的名字

    我们很自然可以想到这些,虽然不完善,但已l很接近正确的做法了。实际上RMI要得以实现还得意于Java一个很重要的特性,是Java反射机制。我们需要知道服务的名字Q但又必隐藏实现的代码Q如何去做呢Q答案就是:接口Q?br /> 举个例子Q?br /> public interface Person(){
    public void sayHello();
    }

    Public class PersonImplA implements Person{
    public PersonImplA(){}

    public void sayHello(){ System.out.println(“Hello!”);}
    }

    Public class PersonImplB implements Person{
    public PersonImplB(){}

    public void sayHello(){ System.out.println(“Nice to meet you!”);}
    }

    客户端:Person p = Naming.lookup(“PersonService”);
    p.sayHello();

    p几段代码包含了几乎所有的实现技术,大家怿么?客户端请求一个say hello服务Q服务器q行时接到这个请求,利用Java反射机制的Class.newInstance()q回一个对象,但客L不知道服务器q回的是 ImplAq是ImplBQ它接受用的参数{֐是PersonQ它知道实现了Person接口的对象一定有sayHello()ҎQ这意味着客户端ƈ不知道服务器真正如何d现的Q但它通过了解Person接口明确了它要用的服务方法名字叫做sayHello()?br />
    如此cLQ服务器只需要暴露自q接口出来供客LQ所有客L可以自己选择需要的服务。这像馆只要拿出自己的菜单出来让客户选择Q就可以在后台厨房一道道的按需做出来,它怎么做的通常是不让客L道的Q(传菜谱吧,^_^Q?br />
    最后一Ҏ我调用lookupQ查找一个叫PersonService名字的对象,服务器只要看到这个名字,在自q目录Q相当于电话)中找到对应的对象名字提供服务可以了Q这个目录就叫做JNDI (Java命名与目录接口)Q相信大家也听过的?br />
    有兴的朋友不妨自己做个RMI的应用,很多前辈的博客中有简单的例子。提CZ下利用Jdk的bin目录中rmi.exe?rmiregistry.exe两个命o可以自己徏起一个服务器Q提供远E服务。因Z子很Ҏ找,我就不自׃D例子了!


    David1228 2010-08-17 10:30 发表评论
    ]]>
    Java关于XML的解?/title><link>http://www.tkk7.com/ldwblog/archive/2010/08/17/329069.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Tue, 17 Aug 2010 02:15:00 GMT</pubDate><guid>http://www.tkk7.com/ldwblog/archive/2010/08/17/329069.html</guid><wfw:comment>http://www.tkk7.com/ldwblog/comments/329069.html</wfw:comment><comments>http://www.tkk7.com/ldwblog/archive/2010/08/17/329069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ldwblog/comments/commentRss/329069.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ldwblog/services/trackbacks/329069.html</trackback:ping><description><![CDATA[怿大家对XML都不陌生Q含义是可扩展标记语a。本w它也就是一个数据的载体以树状表现Ş式出现。后来慢慢的数据变成了信息,区别是信息可以包括可变的状态从而针对程序硬~码的做法变革ؓ针对l一接口编码而可变状态作Z息进入了XML中存储。这h变状态实现扩展的唯一工作是在XML中添加一D|本信息就可以了,代码不需要改动也不需要重新编译。这个灵zL是XML诞生时候谁也没惛_的?br /> <br /> 当然Q如果接口要能提取XML中配|的信息需要程序能解析规范的XML文gQJava中当然要提高包对q个行ؓq行有利支持。笔者打讲到的两个包是 org.w3c.dom和javax.xml.parsers和。(大家可以览一下这些包中间的接口和cd义)<br /> <br /> Javax.xml.parsers包很单,没有接口Q两个工厂配两个解析器。显然解析XML是有两种方式的:DOM解析和SAX解析。本质上q没有谁好谁不好Q只是实现的思想不一LŞ了。给一个XML文g的例子:<br /> <?xml version=”1.0” encoding=”UTF-8” ><br /> <root ><br /> <child name=”Kitty” ><br /> A Cat<br /> </child ><br /> </root ><br /> <br /> 所谓DOM解析的思\是把整个树状囑֭入内存中Q需要那个节点只需要在树上搜烦可以读到节点的属性,内容{,q样的好处是所有节点皆在内存可以反复搜索重复用,~点是需要消耗相应的内存I间?br /> <br /> 自然SAX解析的思\是Z克服DOM的缺点,以事件触发ؓ基本思\Q顺序的搜烦下来Q碰CElement之前触发什么事Ӟ到之后做什么动作。由于需要自己来写触发事件的处理ҎQ所以需要借助另外一个自定义的HandlerQ处于org.xml.sax.helpers包中。它的优点当然是不用整个包都d内存Q缺点也是只能顺序搜索,走完一遍就得重来?br /> <br /> 大家很容易就能猜刎ͼ接触到的J2ee框架用的是哪一U,昄是DOM。因为类似StrutsQHibernate框架配置文g毕竟是很的一部分配置信息Q而且需要频J搜索来dQ当然会采用DOM方式Q其实SAX内部也是用DOM采用的结构来存储节点信息的)。现在无论用什么框Ӟq真隑֏C?SAX来解析XML的技术了Q如果哪位仁兄知道,误W者也学习学习?br /> <br /> 既然解析方式有了Q那么就需要有解析的存储位|。不知道大家是否发现org.w3c.domq个包是没有实现cd部都是接口的。这里笔者想说一下Java 如何对XML解析是Jdk应该考虑的事Q是它的责Q。而w3cl织是维护定义XML标准的组l,所以一个XMLl构是怎么L由w3c说了,它不兛_ Java如何d玎ͼ于是乎规定了所有XML存储的结构应该遵循的规则Q这是org.w3c.dom里全部的接口目的所在。在W者看来,单理解接口的概念是实现者必遵守的原则?br /> <br /> 整个XML对应的结构叫Document、子元素对应的叫做Element、还有节点相关的Node、NodeList、Text、Entity?CharacterData、CDATASection{接口,它们都可以在XML的语法中间找到相对应的含义。由于这里不是讲解XML基本语法Q就不多介绍了。如果大家感兴趣Q笔者也可以专门写一关于XML的语法规则帖与大家分享一下?br /> <br /> 2Q?Java Swing<br /> Swing是一个让人又爱又恨的东西Q可׃处在于上手很ҎQ较AWT比v来Swing提供的界面功能更加强大,可恨之处在于~复杂的界面工作量实在是巨大。笔者写q超q?000行的Swing界面Q感觉用户体验还不是那么优秀。最q又写过过6000行的Q由于功能模块多了,整体效果q只是一般般。体会最q׃个字Q篏! 所以大家现在都陆箋不怎么用Swing在真正开发的目上了Q太多界面技术可以取代它了。笔者去写也是迫于无奈组里面大家都没写过Q我不入地域谁入Q?br /> <br /> 管Swing慢慢的在被h忽略Q特别是随着B/S慢慢的在ҎC/SQ笔者倒是很愿意站出来为Swing正n。每一Ҏ术的掌握l不是ؓ了流行时跟风。真正喜ƢJava的朋友们q是应该好好体会一下SwingQ相信在校的很多学生也很多在学习它。很可能从Jdk 1.1?.2走过来的很多大学老师可能是最不熟悉它的?br /> Swing提供了一l轻lgl称为JComponentQ它们与AWTlg的最大区别是JComponent全部都是ContainerQ?Container的特Ҏ里面可以装蝲别的lg。在Swinglg中无论是JButton、JLabel、JPanel、JList{都可以再装入Q何其他组件。好处是E序员可以对Swinglg实现“再开?#8221;Q针对特定需求构q按钮、标{、画ѝ列表之cȝ特定lg?br /> <br /> 有轻自然有重,那么ȝ件和重组件区别是Q重lg表现出来的Ş态因操作pȝ不同而异Q轻lg是Swing自己提供GUIQ在跨^台的时候最大程度的保持一致?br /> 那么在编E的时候要注意一些什么呢Q笔者谈谈自q几点l验Q?br /> <br /> a. 明确一个概念,只有Framelg才可以单独显C的Q也许有Z说JOptionPane里面的静态方法就实现了单独窗口出玎ͼ但追L代码会发现其实现实出来的Dialog也需要依托一个FrameH体Q如果没有指定就会默认生一个然后装载这个Dialog昄出来?br /> <br /> b. JFrame是由q么几部分组成:<br /> 最底下一层JRootPaneQ上面是glassPane (一个JPanel)和layeredPane (一个JLayeredPane)Q而layeredPane又由contentPane(一个JPanel)和menuBar构成。我们的lg都是加在 contentPane上,而背景图片只能加在layeredPane上面。至于glassPane是一个透明的覆盖了contentPane的一层,在特定效果中被利用到来记录鼠标坐标或掩饰组件?br /> <br /> c. Z增强用户体验Q我们会在一些按钮上d快捷键,但Swing里面通常只能识别键盘的Alt键,要加入其他的快捷键,必须自己实现一个ActionListener?br /> <br /> d. 通过setLayout(null)可以使得所有组件以setBounds()的四个参数来_定位各自的大、位|,但不推荐使用Q因为好的编E风g应该在Swing代码中硬~码具体数字Q所有的数字应该以常数的形式l一存在一个静态无实例资源cL件中。这个静态无实例cȝ一负责Swing界面的风|包括字体和颜色都应该包括q去?br /> <br /> e. 好的界面设计有一条Golden Rule: 用户不用M手册通过数试p学会使用软g。所以尽量把按钮以菜单的形式Q不是右键菜单q是H体自带剙菜单Q呈现给֮Q除非是频繁点击的按钮才有必要直接呈现在界面中?br /> <br /> 其实Swing的功能是相当强大的,只是现在应用不广泛,专门ȝI大概是要花不少旉的。笔者在各网站论坛浏览关于Swing的技巧文章还是比较可信的Q自己所学非常有限,各h体会对Swing各个lg的掌握就是一个实늧累的q程。笔者只用到q以上这些,所以只能谈谈部分想法,q望大家见谅Q? <img src ="http://www.tkk7.com/ldwblog/aggbug/329069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ldwblog/" target="_blank">David1228</a> 2010-08-17 10:15 <a href="http://www.tkk7.com/ldwblog/archive/2010/08/17/329069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Java的多U程~程http://www.tkk7.com/ldwblog/archive/2010/08/17/329063.htmlDavid1228David1228Tue, 17 Aug 2010 01:48:00 GMThttp://www.tkk7.com/ldwblog/archive/2010/08/17/329063.htmlhttp://www.tkk7.com/ldwblog/comments/329063.htmlhttp://www.tkk7.com/ldwblog/archive/2010/08/17/329063.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/329063.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/329063.html a. A对象实现Runnable接口QA.start()q行后所谓的U程对象是谁Q是A么?
    b. U程的wait()、notify()Ҏ到底是做什么时候用的,什么时候用Q?br /> c. Z么线E的suspendҎ会被标注q时Q不推荐再用,U程q能挂v么?
    d. Z同步我们会对U程Ҏ声明Synchronized来加锁在对象上,那么如果父类的f()Ҏ加了SynchronizedQ子c重写f()Ҏ必须也加Synchronized么?如果子类的f()Ҏ重写时声明Synchronizedq调用super.f()Q那么子cd象上到底有几把锁呢?会因为竞争生死锁么Q?br />
    呵呵Q各位能回答上来几道呢?如果q些都能{上来,说明对线E的概念q是满清晰的Q虽说还q远不能精通。笔者这里一一做回{,于幅的原因,W者尽量说得简介一点,如果大家有疑惑的Ƣ迎一赯论?br />
    首先W一点,U程跟对象完全是两回事,虽然我们也常说线E对象。但当你用run()和start()来启动一个线E之后,U程其实跟这个承了 Thread或实CRunnable的对象已l没有关pMQ对象只能算内存中可用资源而对象的Ҏ只能内存正文区可以执行的代码段而已。既然是资源和代码段Q另外一个线E当然也可以去访问,main函数执行p会启动两个U程Q一个我们称之ؓȝE,q一个是垃圾攉器的U程Q主U程l束意味着E序l束Q可垃圾攉器线E很可能正在工作?br />
    W二点,wait()和sleep()cMQ都是让U程处于d状态暂停一D|_不同之处在于wait会释攑ֽ前线E占有的所有的锁,?sleep不会。我们知道获得锁的唯一Ҏ是进入了Synchronized保护代码D,所以大家会发现只有SynchronizedҎ中才会出?waitQ直接写会给警告没有获得当前对象的锁。所以notify跟wait配合使用Qnotify会重新把锁还l阻塞的U程重而其l执行,当有多个对象wait了,notify不能定唤醒哪一个,必经锁只有一把,所以一般用notifyAll()来让它们自己Ҏ优先U等竞争那唯一的一把锁Q竞争到的线E执行,其他U程只要l箋wait?br />
    从前Java允许在一个线E之外把U程挂vQ即调用suspendҎQ这L操作是极不安全的。根据面向对象的思想每个对象必须对自q行ؓ负责Q而对自己的权力进行封装。如果Q何外步对象都能ɾU程被挂赯阻塞的话,E序往往会出现؜乱导致崩溃,所以这LҎ自然是被毙掉了啦?br />
    最后一个问题比较有意思,首先回答的是子类重写f()Ҏ可以加Synchronized也可以不加,如果加了而且q内部调用了super.f ()的话理论上是应该对同一对象加两把锁的,因ؓ每次调用SynchronizedҎ都要加一把,调用子类的f首先加了一把,q入Ҏ内部调用父类?f又要加一把,加两把不是互斥的么?那么调父cf加锁不就必须永远{待已经加的锁释放而造成死锁么?实际上是不会的,q个机制叫重q入Q当父类的fҎ试图在本对象上再加一把锁的时候,因ؓ当前U程拥有q个对象的锁Q也可以理解为开启它的钥匙,所以同一个线E在同一对象上还没释放之前加W二ơ锁是不会出问题的,q个锁其实根本就没有加,它有了钥匙,不管加几把还是可以进入锁保护的代码段Q畅通无阻,所以叫重进入,我们可以单认为第二把锁没有加上去?br />
    总而言之,Synchronized的本质是不让其他U程在同一对象上再加一把锁?

    David1228 2010-08-17 09:48 发表评论
    ]]>
    关于jdk和jre??http://www.tkk7.com/ldwblog/archive/2010/08/16/328987.htmlDavid1228David1228Mon, 16 Aug 2010 06:39:00 GMThttp://www.tkk7.com/ldwblog/archive/2010/08/16/328987.htmlhttp://www.tkk7.com/ldwblog/comments/328987.htmlhttp://www.tkk7.com/ldwblog/archive/2010/08/16/328987.html#Feedback0http://www.tkk7.com/ldwblog/comments/commentRss/328987.htmlhttp://www.tkk7.com/ldwblog/services/trackbacks/328987.html 大家肯定在安装JDK的时候会有选择是否安装单独的jreQ一般都会一起安装,我也大家q样做。因h能帮助大家弄清楚它们的区别:

    Jre 是java runtime environment, 是javaE序的运行环境。既然是q行Q当然要包含jvmQ也是大家熟悉的虚拟机啦,q有所有javacd的class文gQ都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文g呢?学过MFC的都知道什么是dll文g吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机?br />
    Jdk 是java development kitQ是java的开发工具包Q里面包含了各种cd和工兗当然也包括了另外一个Jre. 那么Z么要包括另外一个Jre呢?而且jdk/jre/bin同时有client和server两个文g夹下都包含一个jvm.dll。说明是有两个虚拟机的。这一点不知道大家是否注意C呢?

    怿大家都知道jdk的bin下有各种javaE序需要用到的命oQ与jre的bin目录最明显的区别就是jdk下才有javacQ这一点很好理解,因ؓ jre只是一个运行环境而已。与开发无养I正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质?jvmQ?而仅仅作行环境的jre下只需要client性质的jvm.dll够了?br />
    记得在环境变量path中设|jdk/bin路径麽?q应该是大家学习Java的第一步吧Q老师会告诉大家不讄的话javac和java是用不了的。确实jdk/bin目录下包含了所有的命o。可是有没有人想q我们用的java命oq不?jdk/bin目录下的而是jre/bin目录下的呢?不信可以做一个实验,大家可以把jdk/bin目录下的java.exe剪切到别的地方再q行 javaE序Q发C什么?一切OKQ?br />
    那么有h会问了?我明明没有设|jre/bin目录到环境变量中啊?

    试想一下如果javaZ提供l大多数Z用,他们是不需要jdk做开发的Q只需要jre能让javaE序跑v来就可以了,那么每个客户q需要手动去讄环境变量多麻烦啊Q所以安装jre的时候安装程序自动帮你把jre的java.exedCpȝ变量中,验证的方法很单,大家看到了系l环境变量的 path最前面?#8220;%SystemRoot%\system32;%SystemRoot%;”q样的配|,那么再去Windows/system32下面ȝ看吧Q发C什么?有一个java.exe?br />
    如果能够把jdk/bin挪到system32变量前面Q当然也可以q使用jdk/jre里面的javaQ不q除非有必要Q我不徏议大家这么做。用单独的jre跑javaE序也算是客L境下的一U测试?br />
    q下大家应该更清楚jdk和jre内部的一些联pd区别了吧Q?br />
    PS: 其实q有满多感想可以ȝ的,一ơ写多了怕大家扔砖头砸死我,怪我太罗唆。大家应该更加踏实更加务实的d一些研Iƈ互相分n心得Q大方向和太前沿的技术讨论是必要的但最好不要太多,毕竟自己基础都还没打好,什么都讲最新版本其实是q步的一大障!


    David1228 2010-08-16 14:39 发表评论
    ]]>
    JAVA对List的排?/title><link>http://www.tkk7.com/ldwblog/archive/2010/08/11/328547.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Wed, 11 Aug 2010 08:15:00 GMT</pubDate><guid>http://www.tkk7.com/ldwblog/archive/2010/08/11/328547.html</guid><wfw:comment>http://www.tkk7.com/ldwblog/comments/328547.html</wfw:comment><comments>http://www.tkk7.com/ldwblog/archive/2010/08/11/328547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ldwblog/comments/commentRss/328547.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ldwblog/services/trackbacks/328547.html</trackback:ping><description><![CDATA[Collections.sort(list, new Comparator<TCmsFormDTO>()<br />   {<br />    public int compare(TCmsFormDTO o1, TCmsFormDTO o2)<br />    {<br />     return new BeanComparator().compare(o1.getName(), o2.getName());<br />    }<br />   }); <img src ="http://www.tkk7.com/ldwblog/aggbug/328547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ldwblog/" target="_blank">David1228</a> 2010-08-11 16:15 <a href="http://www.tkk7.com/ldwblog/archive/2010/08/11/328547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java之LinkedList链表试http://www.tkk7.com/ldwblog/archive/2009/08/18/291587.htmlDavid1228David1228Tue, 18 Aug 2009 00:33:00 GMThttp://www.tkk7.com/ldwblog/archive/2009/08/18/291587.html        // 如果想通过iteratorq行集合的添加、删除、修Ҏ作,可以使用java.util.ListIterator接口Q该接口实现了java.util.Iterator接口Q同时还增加了一些额外的ҎQ方便用,如add、remove、set、nextIndex(调用nextҎq回元素的烦引|intcd)、previousIndex(调用previousҎq回元素的烦引|intcd)?nbsp;
            List<String> staff = new LinkedList<String>();
            staff.add("Amy");
            staff.add("Bob");
            staff.add("Carl");

            // 删除Ҏ很特D,真正删除的是iter左边的元? cM于退格键?/span>
            ListIterator<String> iter = staff.listIterator();
            iter.next();
            iter.remove();
          
            // 遍历.
            for (Iterator<String> iterator = staff.iterator(); iterator.hasNext();) {
                String s = (String) iterator.next();
                System.out.println("-------------->" + s);
            }
    ConcurrentModificationException异常什么时候会发生Q?/div>
    List<String> staff = new LinkedList<String>();
            staff.add("Amy");
            staff.add("Bob");
            staff.add("Carl");

            // ConcurrentModificationException异常什么时候会发生Q?/span>
            ListIterator<String> iter = staff.listIterator();
            ListIterator<String> iter2 = staff.listIterator();
           
            // 当有多个iterator对同一个listq代Q如果有q代器对listq行了诸如add或remove的操作时Q则另一个P代器会发生该异常?br />        // 因ؓiterator会负责检所他自q索引变化跟所q代集合的变化是否是一致的Q如果不一致就会抛?/span>ConcurrentModificationException异常?/span>
            // 如果有进行setҎ的操作,则不会发生该异常?/span>
            iter.add("yyy");
            iter.remove();
            iter2.next();

            // 按顺序添加到集合?
            for (Iterator<String> iterator = staff.iterator(); iterator.hasNext();) {
                String s = (String) iterator.next();
                System.out.println("-------------->" + s);
            }

    Java之LinkedList集合l合listIterator的用案?
    package com.javacore;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.ListIterator;

    public class LinkedListTest3 {
        public static void main(String[] args) {
            List<String> a = new LinkedList<String>();
            a.add("a-Amy");
            a.add("a-Bob");
            a.add("a-Carl");

            List<String> b = new LinkedList<String>();
            b.add("b-xxx");
            b.add("b-yyy");
            b.add("b-zzz");

            ListIterator<String> aIter = a.listIterator();
            Iterator<String> bIter = b.iterator();
            // b集合插入/合ƈ到a集合?/span>
            while (bIter.hasNext()) {
                if (aIter.hasNext()) {
                    aIter.next();
                }
                aIter.add(bIter.next());
            }
            // 输出a集合
            System.out.println(a);

            // 从b中删除第二个元素
            bIter = b.iterator();
            while (bIter.hasNext()) {
                bIter.next(); // 跌W一个元?/span>

                if (bIter.hasNext()) {
                    bIter.next(); // 跌下一个元?/span>
                    bIter.remove(); // 删除那个元素
                }
            }

            // 输出b集合
            System.out.println(b);

            // 删除集合b
            a.removeAll(b);
            
            System.out.println(a);
        }
    }


    David1228 2009-08-18 08:33 发表评论
    ]]>l承对序列化的媄?/title><link>http://www.tkk7.com/ldwblog/archive/2009/04/05/263979.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Sun, 05 Apr 2009 04:13:00 GMT</pubDate><guid>http://www.tkk7.com/ldwblog/archive/2009/04/05/263979.html</guid><description><![CDATA[    只有注册用户d后才能阅读该文?a href='http://www.tkk7.com/ldwblog/archive/2009/04/05/263979.html'>阅读全文</a><img src ="http://www.tkk7.com/ldwblog/aggbug/263979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ldwblog/" target="_blank">David1228</a> 2009-04-05 12:13 <a href="http://www.tkk7.com/ldwblog/archive/2009/04/05/263979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://jomujy.com" target="_blank">ŷŷɫ</a>| <a href="http://sdkjkj.com" target="_blank">岻Ƶ</a>| <a href="http://91tapp.com" target="_blank">պav</a>| <a href="http://meijibear.com" target="_blank">˳޵һվ߲</a>| <a href="http://tha2008.com" target="_blank">޽Сxxxxɫ</a>| <a href="http://aa2176.com" target="_blank">޹AVһ </a>| <a href="http://zhhy68.com" target="_blank">йŮר</a>| <a href="http://q2c6.com" target="_blank">֮4δɾ</a>| <a href="http://shulan88.com" target="_blank">Ʒվ</a>| <a href="http://www-777768.com" target="_blank">91avѹۿ</a>| <a href="http://szgyk.com" target="_blank">Ƭ91Ʒѿ3</a>| <a href="http://thinkchating.com" target="_blank">Ƶһ</a>| <a href="http://ganbadei.com" target="_blank">þþþ޾Ʒϵ</a>| <a href="http://hbjpxnyqckj.com" target="_blank">Ʒ99þ</a>| <a href="http://jldledu.com" target="_blank">޹þþþƷС˵ </a>| <a href="http://www676617.com" target="_blank">޳˻ɫ</a>| <a href="http://wusongtv.com" target="_blank">AVһӰ</a>| <a href="http://yyfass.com" target="_blank">þþþŮʦһ</a>| <a href="http://billtsssrvp.com" target="_blank">˾ƷƵȫ鶹</a>| <a href="http://8x8xbu.com" target="_blank">Av߲</a>| <a href="http://wwwav888.com" target="_blank">AVһҳƷ</a>| <a href="http://chowngroup.com" target="_blank">ŷ޾Ʒ˾þԻ</a>| <a href="http://179228.com" target="_blank">99re6߾Ʒѹۿ</a>| <a href="http://kencery.com" target="_blank">ĻƵ</a>| <a href="http://jisuanq.com" target="_blank">޾ƷһƷƷƷ</a>| <a href="http://3bmmatv.com" target="_blank">˾Ʒձַ</a>| <a href="http://wxxwy.com" target="_blank">ˬaëƬ</a>| <a href="http://masfd.com" target="_blank">žƷƵ</a>| <a href="http://cfxzp.com" target="_blank">պAvҹҹˬ</a>| <a href="http://mcsser.com" target="_blank">պһѲ</a>| <a href="http://kppp4.com" target="_blank">߹ۿav</a>| <a href="http://dingdingduo.com" target="_blank">޾Ʒ</a>| <a href="http://ymtphoto.com" target="_blank">վɫƵѹۿ45</a>| <a href="http://606059.com" target="_blank">Ƶ</a>| <a href="http://www664660a.com" target="_blank">޾ƷҺ</a>| <a href="http://www3ratcom.com" target="_blank">Ʒһ߹ۿ</a>| <a href="http://wwwk47.com" target="_blank">hƵѹۿ</a>| <a href="http://wcnmgb.com" target="_blank">žžAVƬ</a>| <a href="http://nsmtv.com" target="_blank">һ**ƬƵ</a>| <a href="http://yuezhaoming.com" target="_blank">ձ˻ʿxxxxƵ</a>| <a href="http://yw762.com" target="_blank">޾Ʒպרsilk</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>