﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Ordinary hut-随笔分类-java</title><link>http://www.blogjava.net/landor2004/category/38855.html</link><description>人间一福地，胜似天仙宫</description><language>zh-cn</language><lastBuildDate>Sat, 27 Apr 2013 07:36:14 GMT</lastBuildDate><pubDate>Sat, 27 Apr 2013 07:36:14 GMT</pubDate><ttl>60</ttl><item><title>Notify和Wait的简单理解</title><link>http://www.blogjava.net/landor2004/archive/2013/04/27/398507.html</link><dc:creator>landor</dc:creator><author>landor</author><pubDate>Sat, 27 Apr 2013 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/landor2004/archive/2013/04/27/398507.html</guid><wfw:comment>http://www.blogjava.net/landor2004/comments/398507.html</wfw:comment><comments>http://www.blogjava.net/landor2004/archive/2013/04/27/398507.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/landor2004/comments/commentRss/398507.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/landor2004/services/trackbacks/398507.html</trackback:ping><description><![CDATA[<div>java中wait和notify的简单理解</div><div>1 它们都是Object的属性；</div><div>2 wait：释放对象锁；由于把锁释放了，当前线程就会卡住，继续再等待获取锁的机会（也许是干了一半的活后，就把活交出去了，然后等待继续干活的机会）；</div><div>3 notify：告诉其中一个等待的线程（具体哪一个不知道），我已经用完这个对象，你可以继续用了</div><div>4 它们都要包含在synchronized块里，只有先锁住这个对象，才能进行wait、notify操作；<br /><br /><div>例子：</div><div>1 定义一个普通对象<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MyObj&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;name;<br />}</div><div>2 主线程类，定义MyObj对象，new两个线程</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;TestMain&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;MyObj&nbsp;obj&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MyObj();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Throwable&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;TestMain().myTest();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;myTest()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Throwable{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test1&nbsp;test1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Test1();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test2&nbsp;test2&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Test2();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;t1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Thread(test1);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;t2&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Thread(test2);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t1.start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1000);<span style="color: #008000; ">//</span><span style="color: #008000; ">启动线程1，然后主线程睡眠1秒钟，再启动2</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t2.start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><div>3 定义线程1，：</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Test1&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;Runnable{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;run()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">synchronized</span>&nbsp;(TestMain.obj)&nbsp;{<span style="color: #008000; ">//</span><span style="color: #008000; ">占有对象锁</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMain.obj.name="1";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(TestMain.obj.name);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">打印出1</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMain.obj.wait();&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">释放对TestMain.obj对象的锁，同时当前线程立即卡住，陷入等待</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(TestMain.obj.name);<span style="color: #008000; ">//</span><span style="color: #008000; ">只有线程再次抢到TestMain.obj的锁后，才会运行</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><div>4 线程2：</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Test2&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;Runnable{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;run()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">synchronized</span>&nbsp;(TestMain.obj)&nbsp;{&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">当线程1释放这个对象的锁时，本线程立即得到</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMain.obj.name&nbsp;=&nbsp;"2";&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">改值</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMain.obj.notify();<span style="color: #008000; ">//</span><span style="color: #008000; ">通知占用了TestMain.obj且当前是等待的线程（线程1）可以继续，但是必须等到本synchronized块执行完毕。</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMain.obj.name&nbsp;=&nbsp;"3";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMain.obj.name&nbsp;=&nbsp;"4";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestMain.obj.name&nbsp;=&nbsp;"7";<span style="color: #008000; ">//</span><span style="color: #008000; ">执行完毕，此时线程1被唤醒，会打印出7</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><div>结果显示1和7</div><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"></div></div></div><img src ="http://www.blogjava.net/landor2004/aggbug/398507.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/landor2004/" target="_blank">landor</a> 2013-04-27 15:23 <a href="http://www.blogjava.net/landor2004/archive/2013/04/27/398507.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdbc驱动列表</title><link>http://www.blogjava.net/landor2004/archive/2009/12/21/306763.html</link><dc:creator>landor</dc:creator><author>landor</author><pubDate>Mon, 21 Dec 2009 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/landor2004/archive/2009/12/21/306763.html</guid><wfw:comment>http://www.blogjava.net/landor2004/comments/306763.html</wfw:comment><comments>http://www.blogjava.net/landor2004/archive/2009/12/21/306763.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/landor2004/comments/commentRss/306763.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/landor2004/services/trackbacks/306763.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: jdbc驱动列表&nbsp;&nbsp;<a href='http://www.blogjava.net/landor2004/archive/2009/12/21/306763.html'>阅读全文</a><img src ="http://www.blogjava.net/landor2004/aggbug/306763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/landor2004/" target="_blank">landor</a> 2009-12-21 10:25 <a href="http://www.blogjava.net/landor2004/archive/2009/12/21/306763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用nekohtml来获取网页指定内容</title><link>http://www.blogjava.net/landor2004/archive/2009/05/22/277319.html</link><dc:creator>landor</dc:creator><author>landor</author><pubDate>Fri, 22 May 2009 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/landor2004/archive/2009/05/22/277319.html</guid><wfw:comment>http://www.blogjava.net/landor2004/comments/277319.html</wfw:comment><comments>http://www.blogjava.net/landor2004/archive/2009/05/22/277319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/landor2004/comments/commentRss/277319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/landor2004/services/trackbacks/277319.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用nekohtml来获取网页指定内容&nbsp;&nbsp;<a href='http://www.blogjava.net/landor2004/archive/2009/05/22/277319.html'>阅读全文</a><img src ="http://www.blogjava.net/landor2004/aggbug/277319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/landor2004/" target="_blank">landor</a> 2009-05-22 14:11 <a href="http://www.blogjava.net/landor2004/archive/2009/05/22/277319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdbc关于对clob字段的方法setCharacterStream的说明</title><link>http://www.blogjava.net/landor2004/archive/2009/04/07/264286.html</link><dc:creator>landor</dc:creator><author>landor</author><pubDate>Tue, 07 Apr 2009 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/landor2004/archive/2009/04/07/264286.html</guid><wfw:comment>http://www.blogjava.net/landor2004/comments/264286.html</wfw:comment><comments>http://www.blogjava.net/landor2004/archive/2009/04/07/264286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/landor2004/comments/commentRss/264286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/landor2004/services/trackbacks/264286.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: jdbc关于对clob字段的方法setCharacterStream的说明&nbsp;&nbsp;<a href='http://www.blogjava.net/landor2004/archive/2009/04/07/264286.html'>阅读全文</a><img src ="http://www.blogjava.net/landor2004/aggbug/264286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/landor2004/" target="_blank">landor</a> 2009-04-07 17:15 <a href="http://www.blogjava.net/landor2004/archive/2009/04/07/264286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中Collections.sort() 排序函数的用法</title><link>http://www.blogjava.net/landor2004/archive/2009/04/07/sort.html</link><dc:creator>landor</dc:creator><author>landor</author><pubDate>Tue, 07 Apr 2009 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/landor2004/archive/2009/04/07/sort.html</guid><wfw:comment>http://www.blogjava.net/landor2004/comments/264279.html</wfw:comment><comments>http://www.blogjava.net/landor2004/archive/2009/04/07/sort.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/landor2004/comments/commentRss/264279.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/landor2004/services/trackbacks/264279.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Collections.sort方法对list排序有两种方法<br>第一种是list中的对象实现Comparable接口<br>第二种方法是根据Collections.sort重载方法来实现&nbsp;&nbsp;<a href='http://www.blogjava.net/landor2004/archive/2009/04/07/sort.html'>阅读全文</a><img src ="http://www.blogjava.net/landor2004/aggbug/264279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/landor2004/" target="_blank">landor</a> 2009-04-07 16:40 <a href="http://www.blogjava.net/landor2004/archive/2009/04/07/sort.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>