ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>国产欧美日韩在线观看视频,裸体xxxx视频在线,日韩精品专区在线http://www.aygfsteel.com/zhanglongsr/category/49255.htmlè·¯æ˜O漫其修远兮,向ְ†ä¸Šä¸‹è€Œæ±‚索!zh-cnTue, 29 Jan 2019 08:59:12 GMTTue, 29 Jan 2019 08:59:12 GMT60ReentrantLock源码之二unlockæ–ÒŽ³•解析(锁的释放)http://www.aygfsteel.com/zhanglongsr/articles/356864.htmlzhangxlzhangxlFri, 19 Aug 2011 07:24:00 GMThttp://www.aygfsteel.com/zhanglongsr/articles/356864.htmlhttp://www.aygfsteel.com/zhanglongsr/comments/356864.htmlhttp://www.aygfsteel.com/zhanglongsr/articles/356864.html#Feedback0http://www.aygfsteel.com/zhanglongsr/comments/commentRss/356864.htmlhttp://www.aygfsteel.com/zhanglongsr/services/trackbacks/356864.html前面一èŠ?/a>中,我们分析了ReentrantLock.lock()æ–ÒŽ³•åQŒæŽ¥ä¸‹æ¥æˆ‘们接着分析ReentrantLock.unlock()æ–ÒŽ³•ã€?br />

1.ReentrantLock.unlock()分析

(1)首先ž®è¯•释放锁,如果要求释放数等于锁状态数åQŒé‚£ä¹ˆå°†é”çŠ¶æ€ä½æ¸?åQŒæ¸…除锁所有者,˜q”回trueåQ›å¦åˆ™è¿”回false;
(2)如果(1)˜q”回的是trueåQŒè¯´æ˜Žé”å®Œå…¨é‡Šæ”¾ã€‚接下来ž®†æ£€æŸ¥ç­‰å¾…队列,òq‰™€‰æ‹©ä¸€ä¸ªwaitStatus处于½{‰å¾…状态的节点下的¾U¿ç¨‹unpark(恢复)åQŒé€‰æ‹©çš„依据是从尾节点开始,选取最靠近头节点的½{‰å¾…节点,同时清理队列中线½E‹è¢«å–消的节点;
(3)如果(1)˜q”回falseåQŒè¯´æ˜Žé”åªæ˜¯éƒ¨åˆ†é‡Šæ”¾åQŒå½“前线½E‹ä»æ—§æŒæœ‰è¯¥é”ï¼›

 1java.util.concurrent.locks.ReentrantLock
 2 public void unlock() {
 3        sync.release(1);
 4 }

 5
 6java.util.concurrent.locks.AbstractQueuedSynchronizer
 7public final boolean release(int arg) {
 8        if (tryRelease(arg)) {   
 9            Node h = head;
10            if (h != null && h.waitStatus != 0)
11                unparkSuccessor(h);
12            return true;
13        }

14        return false;
15    }

16
17
18 protected final boolean tryRelease(int releases) {
19            int c = getState() - releases;   //重入锁加锁的‹Æ¡æ•°-释放数量
20            if (Thread.currentThread() != getExclusiveOwnerThread())   //åˆ¤æ–­ç‹¬å é”æ˜¯å¦äØ“å½“å‰¾U¿ç¨‹æ‰€æœ?/span>
21                throw new IllegalMonitorStateException();
22            boolean free = false;
23            if (c == 0{       //加锁‹Æ¡æ•°=释放数量
24                free = true;
25                setExclusiveOwnerThread(null);     //清除锁拥有者标è¯?/span>
26            }

27            setState(c);        //讄¡½®åŠ é”çŠ¶æ€?/span>
28            return free;
29        }

30
31
32 /**
33     * Wakes up node's successor, if one exists.
34     *
35     * @param node the node
36     */

37    private void unparkSuccessor(Node node) {
38        /*
39         * Try to clear status in anticipation of signalling.  It is
40         * OK if this fails or if status is changed by waiting thread.
41         */

42        compareAndSetWaitStatus(node, Node.SIGNAL, 0);    //清除头节点signal状æ€?/span>
43
44        /*
45         * Thread to unpark is held in successor, which is normally
46         * just the next node.  But if cancelled or apparently null,
47         * traverse backwards from tail to find the actual
48         * non-cancelled successor.
49         */

50        Node s = node.next;
51        if (s == null || s.waitStatus > 0{    //½{‰å¾…队列唤醒的竞争满­‘³FIFOåQŒæœ¬ŒDµä»£ç ä¸»è¦æ˜¯å¯ÀL‰¾æœ€é è¿‘头节点的åQŒä¸”waitStatus为signal、condition的链表节ç‚?/span>
52            s = null;
53            for (Node t = tail; t != null && t != node; t = t.prev)
54                if (t.waitStatus <= 0)
55                    s = t;
56        }

57        if (s != null)
58            LockSupport.unpark(s.thread);
59    }




zhangxl 2011-08-19 15:24 发表评论
]]>
ReentrantLock源码之一lockæ–ÒŽ³•解析(锁的获取)http://www.aygfsteel.com/zhanglongsr/articles/356782.htmlzhangxlzhangxlThu, 18 Aug 2011 06:12:00 GMThttp://www.aygfsteel.com/zhanglongsr/articles/356782.htmlhttp://www.aygfsteel.com/zhanglongsr/comments/356782.htmlhttp://www.aygfsteel.com/zhanglongsr/articles/356782.html#Feedback1http://www.aygfsteel.com/zhanglongsr/comments/commentRss/356782.htmlhttp://www.aygfsteel.com/zhanglongsr/services/trackbacks/356782.html阅读全文

zhangxl 2011-08-18 14:12 发表评论
]]>
java ½{‰å¾…通知/条äšg变量的区别浅æž?/title><link>http://www.aygfsteel.com/zhanglongsr/articles/355210.html</link><dc:creator>zhangxl</dc:creator><author>zhangxl</author><pubDate>Thu, 28 Jul 2011 04:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhanglongsr/articles/355210.html</guid><wfw:comment>http://www.aygfsteel.com/zhanglongsr/comments/355210.html</wfw:comment><comments>http://www.aygfsteel.com/zhanglongsr/articles/355210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhanglongsr/comments/commentRss/355210.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhanglongsr/services/trackbacks/355210.html</trackback:ping><description><![CDATA[<div>    javaåœ?.2版本引入wait-and-notify机制åQŒç”¨äºŽçº¿½E‹é—´é€šä¿¡åQŒå®ƒèƒ½å¤Ÿè®©æŸä¸ªçº¿½E‹ä¸Žå…¶ä»–¾U¿ç¨‹åœ¨ç‰¹å®šæ¡ä»¶ç¬¦åˆæ—¶˜q›è¡Œé€šä¿¡åQ›è€Œæ¡ä»¶å˜é‡æ˜¯åœ?.5版本中concurrency包中提供的,条äšg变量是一¿Uæœ‰å…¶å¤šå…¶ä»–多线½E‹ç³»¾lŸæ‰€æä¾›çš„同步类型,它与javaçš„wai-and-notify机制非常¾cÖM¼¼åQŒä¸‹é¢æˆ‘们通过实例的方式来探讨他们之间的区别ã€?br />     wai-and-notify½CÞZ¾‹ä»£ç åQ? <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.zxl.thread.notify;<br /><img id="Codehighlighter1_31_63_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_63_Open_Text.style.display='none'; Codehighlighter1_31_63_Closed_Image.style.display='inline'; Codehighlighter1_31_63_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_31_63_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_31_63_Closed_Text.style.display='none'; Codehighlighter1_31_63_Open_Image.style.display='inline'; Codehighlighter1_31_63_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_31_63_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/** */</span><span id="Codehighlighter1_31_63_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /> * <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /> * </span><span style="color: #808080">@author</span><span style="color: #008000"> zhangxl<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /> *<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" /> </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_104_1175_Open_Image" onclick="this.style.display='none'; Codehighlighter1_104_1175_Open_Text.style.display='none'; Codehighlighter1_104_1175_Closed_Image.style.display='inline'; Codehighlighter1_104_1175_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_104_1175_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_104_1175_Closed_Text.style.display='none'; Codehighlighter1_104_1175_Open_Image.style.display='inline'; Codehighlighter1_104_1175_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> SynThread1 </span><span style="color: #0000ff">extends</span><span style="color: #000000"> Thread </span><span id="Codehighlighter1_104_1175_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_104_1175_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> Object lockObj;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">volatile</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img id="Codehighlighter1_196_225_Open_Image" onclick="this.style.display='none'; Codehighlighter1_196_225_Open_Text.style.display='none'; Codehighlighter1_196_225_Closed_Image.style.display='inline'; Codehighlighter1_196_225_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_196_225_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_196_225_Closed_Text.style.display='none'; Codehighlighter1_196_225_Open_Image.style.display='inline'; Codehighlighter1_196_225_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> SynThread1(Object lockObj)</span><span id="Codehighlighter1_196_225_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_196_225_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.lockObj </span><span style="color: #000000">=</span><span style="color: #000000"> lockObj;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />    }</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img id="Codehighlighter1_246_662_Open_Image" onclick="this.style.display='none'; Codehighlighter1_246_662_Open_Text.style.display='none'; Codehighlighter1_246_662_Closed_Image.style.display='inline'; Codehighlighter1_246_662_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_246_662_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_246_662_Closed_Text.style.display='none'; Codehighlighter1_246_662_Open_Image.style.display='inline'; Codehighlighter1_246_662_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> run()</span><span id="Codehighlighter1_246_662_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_246_662_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        <br /><img id="Codehighlighter1_274_659_Open_Image" onclick="this.style.display='none'; Codehighlighter1_274_659_Open_Text.style.display='none'; Codehighlighter1_274_659_Closed_Image.style.display='inline'; Codehighlighter1_274_659_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_274_659_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_274_659_Closed_Text.style.display='none'; Codehighlighter1_274_659_Open_Image.style.display='inline'; Codehighlighter1_274_659_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">        </span><span style="color: #0000ff">synchronized</span><span style="color: #000000">(lockObj)</span><span id="Codehighlighter1_274_659_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_274_659_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_290_655_Open_Image" onclick="this.style.display='none'; Codehighlighter1_290_655_Open_Text.style.display='none'; Codehighlighter1_290_655_Closed_Image.style.display='inline'; Codehighlighter1_290_655_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_290_655_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_290_655_Closed_Text.style.display='none'; Codehighlighter1_290_655_Open_Image.style.display='inline'; Codehighlighter1_290_655_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">            </span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">)</span><span id="Codehighlighter1_290_655_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_290_655_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_304_541_Open_Image" onclick="this.style.display='none'; Codehighlighter1_304_541_Open_Text.style.display='none'; Codehighlighter1_304_541_Closed_Image.style.display='inline'; Codehighlighter1_304_541_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_304_541_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_304_541_Closed_Text.style.display='none'; Codehighlighter1_304_541_Open_Image.style.display='inline'; Codehighlighter1_304_541_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">                </span><span style="color: #0000ff">if</span><span style="color: #000000">(i</span><span style="color: #000000">==</span><span style="color: #000000">0</span><span style="color: #000000">)</span><span id="Codehighlighter1_304_541_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_304_541_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_315_427_Open_Image" onclick="this.style.display='none'; Codehighlighter1_315_427_Open_Text.style.display='none'; Codehighlighter1_315_427_Closed_Image.style.display='inline'; Codehighlighter1_315_427_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_315_427_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_315_427_Closed_Text.style.display='none'; Codehighlighter1_315_427_Open_Image.style.display='inline'; Codehighlighter1_315_427_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">                    </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span id="Codehighlighter1_315_427_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_315_427_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />                        System.out.println(Thread.currentThread().getName()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000"> will be waiting<img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />.</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />                        lockObj.wait();<br /><img id="Codehighlighter1_460_535_Open_Image" onclick="this.style.display='none'; Codehighlighter1_460_535_Open_Text.style.display='none'; Codehighlighter1_460_535_Closed_Image.style.display='inline'; Codehighlighter1_460_535_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_460_535_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_460_535_Closed_Text.style.display='none'; Codehighlighter1_460_535_Open_Image.style.display='inline'; Codehighlighter1_460_535_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">                    }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InterruptedException e) </span><span id="Codehighlighter1_460_535_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_460_535_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />                        </span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated catch block</span><span style="color: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="color: #000000">                        e.printStackTrace();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />                    }</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />                }</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />                <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />                System.out.println(Thread.currentThread().getName()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">: i=</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">i);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />                </span><span style="color: #008000">//</span><span style="color: #008000">i++;</span><span style="color: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="color: #000000">                <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />                </span><span style="color: #0000ff">if</span><span style="color: #000000">(i</span><span style="color: #000000">>=</span><span style="color: #000000">1</span><span style="color: #000000">) </span><span style="color: #0000ff">return</span><span style="color: #000000">;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />            }</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />        }</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />    }</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    <br /><img id="Codehighlighter1_705_1173_Open_Image" onclick="this.style.display='none'; Codehighlighter1_705_1173_Open_Text.style.display='none'; Codehighlighter1_705_1173_Closed_Image.style.display='inline'; Codehighlighter1_705_1173_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_705_1173_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_705_1173_Closed_Text.style.display='none'; Codehighlighter1_705_1173_Open_Image.style.display='inline'; Codehighlighter1_705_1173_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000">  main(String[] arg)</span><span id="Codehighlighter1_705_1173_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_705_1173_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        Object lock </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Object();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        SynThread1 t1 </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> SynThread1(lock);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        t1.setName(</span><span style="color: #000000">"</span><span style="color: #000000">SynThread_1</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        SynThread1 t2 </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> SynThread1(lock);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        t2.setName(</span><span style="color: #000000">"</span><span style="color: #000000">SynThread_2</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        t2.start();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        t1.start();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        <br /><img id="Codehighlighter1_924_1071_Open_Image" onclick="this.style.display='none'; Codehighlighter1_924_1071_Open_Text.style.display='none'; Codehighlighter1_924_1071_Closed_Image.style.display='inline'; Codehighlighter1_924_1071_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_924_1071_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_924_1071_Closed_Text.style.display='none'; Codehighlighter1_924_1071_Open_Image.style.display='inline'; Codehighlighter1_924_1071_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">        </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span id="Codehighlighter1_924_1071_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_924_1071_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            Thread.sleep(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            <br /><img id="Codehighlighter1_974_1067_Open_Image" onclick="this.style.display='none'; Codehighlighter1_974_1067_Open_Text.style.display='none'; Codehighlighter1_974_1067_Closed_Image.style.display='inline'; Codehighlighter1_974_1067_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_974_1067_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_974_1067_Closed_Text.style.display='none'; Codehighlighter1_974_1067_Open_Image.style.display='inline'; Codehighlighter1_974_1067_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">            </span><span style="color: #0000ff">synchronized</span><span style="color: #000000">(lock)</span><span id="Codehighlighter1_974_1067_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_974_1067_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />                lock.notify();    </span><span style="color: #008000">//</span><span style="color: #008000">通过¾l“果观察åQŒsun JVM(hotspot)的通知机制极有可能是FIFO的策略,原因是t1、t2只要谁先启动åQŒè°ž®±å°†è¢«å”¤é†’ã€?/span><span style="color: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" /></span><span style="color: #000000">            }</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_1104_1170_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1104_1170_Open_Text.style.display='none'; Codehighlighter1_1104_1170_Closed_Image.style.display='inline'; Codehighlighter1_1104_1170_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_1104_1170_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1104_1170_Closed_Text.style.display='none'; Codehighlighter1_1104_1170_Open_Image.style.display='inline'; Codehighlighter1_1104_1170_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top">        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (InterruptedException e) </span><span id="Codehighlighter1_1104_1170_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_1104_1170_Open_Text"><span style="color: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            </span><span style="color: #008000">//</span><span style="color: #008000"> TODO Aut o-generated catch block</span><span style="color: #008000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="color: #000000">            e.printStackTrace();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />        }</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />    }</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div><br /><br />条äšg变量½CÞZ¾‹åQ?br /> <p>package com.zxl.thread.notify;</p> <p>import java.util.concurrent.locks.Condition;<br />import java.util.concurrent.locks.ReentrantLock;</p> <p>public class ConditionThread implements Runnable {<br /> <br /> <br /> <br /> private ReentrantLock lock;<br /> <br /> private Condition c;<br /> <br /> private volatile int i=0;<br /> <br /> public ConditionThread(ReentrantLock lock){<br />  this.lock = lock;<br />  c = lock.newCondition();<br /> }</p> <p> public void run() {<br />  <br />  lock.lock();<br />  <br />  try{<br />   <br />   while(true){<br />    if(i==0){<br />     System.out.println(Thread.currentThread().getName()+" will be waiting...");<br />     c.await();<br />    }<br />    <br />    System.out.println(Thread.currentThread().getName()+" is already waked up,i="+i);<br />    <br />    if(i>=1) return;<br />   }<br />   <br />  } catch (InterruptedException e) {<br />   // TODO Auto-generated catch block<br />   e.printStackTrace();<br />  }<br />  finally{<br />   lock.unlock();<br />  }<br />  <br />  <br />  <br /> }<br /> <br /> public Condition getCondition(){<br />  return c;<br /> }<br /> <br /> public static void main(String[] args){<br />  <br />  <br />  <br />  ReentrantLock lock = new ReentrantLock();<br />  ConditionThread ct1 = new ConditionThread(lock);<br />  ConditionThread ct2 = new ConditionThread(lock);<br />  Thread t1 = new Thread(ct1);<br />  t1.setName("C_Thread_1");<br />  Thread t2 = new Thread(ct2);<br />  t2.setName("C_Thread_2");<br />  <br />  t1.start();<br />  t2.start();<br />  <br />  try {<br />   Thread.sleep(1000);<br />  } catch (InterruptedException e) {<br />   // TODO Auto-generated catch block<br />   e.printStackTrace();<br />  }<br />  <br />  lock.lock();<br />  ct1.getCondition().signal();   //唤醒½W¬ä¸€ä¸ªçº¿½E?br />  lock.unlock();<br /> }</p> <p>}<br /></p><br /><br /><br /><br /><br /><br /><br /><br /></div><img src ="http://www.aygfsteel.com/zhanglongsr/aggbug/355210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhanglongsr/" target="_blank">zhangxl</a> 2011-07-28 12:11 <a href="http://www.aygfsteel.com/zhanglongsr/articles/355210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">ÖζàÏØ</a>| <a href="http://" target="_blank">Î÷ÎÚ</a>| <a href="http://" target="_blank">Ë«½­</a>| <a href="http://" target="_blank">º¼½õÆì</a>| <a href="http://" target="_blank">Â¹ÒØÏØ</a>| <a href="http://" target="_blank">°ØÏçÏØ</a>| <a href="http://" target="_blank">ÓñÊ÷ÏØ</a>| <a href="http://" target="_blank">ÍòÔØÏØ</a>| <a href="http://" target="_blank">Èø¸ÂÏØ</a>| <a href="http://" target="_blank">Éñ³ØÏØ</a>| <a href="http://" target="_blank">DZ½­ÊÐ</a>| <a href="http://" target="_blank">ÔÓ¶àÏØ</a>| <a href="http://" target="_blank">Âå´¨ÏØ</a>| <a href="http://" target="_blank">µÂÇåÏØ</a>| <a href="http://" target="_blank">ÒæÑôÊÐ</a>| <a href="http://" target="_blank">·¿²ú</a>| <a href="http://" target="_blank">Å®ÐÔ</a>| <a href="http://" target="_blank">¶î¼ÃÄÉÆì</a>| <a href="http://" target="_blank">Âé½­ÏØ</a>| <a href="http://" target="_blank">ËçµÂÏØ</a>| <a href="http://" target="_blank">ɨɽÊÐ</a>| <a href="http://" target="_blank">Áø½­ÏØ</a>| <a href="http://" target="_blank">ÄϳÇÏØ</a>| <a href="http://" target="_blank">°¢³ÇÊÐ</a>| <a href="http://" target="_blank">ÀàÎÚÆëÏØ</a>| <a href="http://" target="_blank">³£µÂÊÐ</a>| <a href="http://" target="_blank">ÖÓÏéÊÐ</a>| <a href="http://" target="_blank">³£É½ÏØ</a>| <a href="http://" target="_blank">Å®ÐÔ</a>| <a href="http://" target="_blank">·á¶¼ÏØ</a>| <a href="http://" target="_blank">Ë«ÁÉÊÐ</a>| <a href="http://" target="_blank">À­×ÎÏØ</a>| <a href="http://" target="_blank">µËÖÝÊÐ</a>| <a href="http://" target="_blank">ÎôÑôÏØ</a>| <a href="http://" target="_blank">ÏØ¼¶ÊÐ</a>| <a href="http://" target="_blank">·á³ÇÊÐ</a>| <a href="http://" target="_blank">ÂåÑôÊÐ</a>| <a href="http://" target="_blank">ãë´¨ÏØ</a>| <a href="http://" target="_blank">Îä¹¦ÏØ</a>| <a href="http://" target="_blank">Î÷ÇàÇø</a>| <a href="http://" target="_blank">»¥Öú</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>