<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AgilePHP &#187; synchronized</title>
	<atom:link href="http://www.agilephp.net/tag/synchronized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.agilephp.net</link>
	<description>开发可以敏捷，人生需要慢慢体味</description>
	<lastBuildDate>Thu, 03 Nov 2011 11:53:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Java中线程同步的简单用法</title>
		<link>http://www.agilephp.net/2009/10/java-wait-and-notify/</link>
		<comments>http://www.agilephp.net/2009/10/java-wait-and-notify/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 02:14:36 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[concurrence]]></category>
		<category><![CDATA[IllegalMonitorStateException]]></category>
		<category><![CDATA[notify]]></category>
		<category><![CDATA[notifyAll]]></category>
		<category><![CDATA[synchronized]]></category>
		<category><![CDATA[thread]]></category>
		<category><![CDATA[wait]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2009/10/java%e4%b8%ad%e7%ba%bf%e7%a8%8b%e5%90%8c%e6%ad%a5%e7%9a%84%e7%ae%80%e5%8d%95%e7%94%a8%e6%b3%95/</guid>
		<description><![CDATA[应用场景：应用程序需要新建若干线程进行事务处理，这些线程处理完毕后，应用程序会进行一些后续的操作。 解决办法：使用Object.wait()，Object.notify()方法。Object.wait()方法会阻断当前线程的执行，直到其他线程调用Object.notify()。 于是可以很快的写出一个示例程序： public static void main(String[] args) { final Object syncObj = new Object(); Thread thread = new Thread() { public void run() { try { Thread.sleep(3000); synchronized(syncObj) { syncObj.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } }; thread.start(); synchronized(syncObj) { try { syncObj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } [...]<h3>相关文章</h3>
<ol>
		<li><a href="http://www.agilephp.net/2009/12/linux-unix-benchmark/" rel="bookmark">Linux\Unix性能测试</a><!-- (21)--></li>
		<li><a href="http://www.agilephp.net/2010/01/fix-chrome-to-add-extensions-in-a-junction-folder/" rel="bookmark">使用mklink或junction后Chrome无法安装扩展的解决办法</a><!-- (14)--></li>
		<li><a href="http://www.agilephp.net/2009/11/couchdb-on-centos-5-4/" rel="bookmark">在CentOS 5.4上安装CouchDB</a><!-- (13.5)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p>应用场景：应用程序需要新建若干线程进行事务处理，这些线程处理完毕后，应用程序会进行一些后续的操作。</p>
<p>解决办法：使用Object.wait()，Object.notify()方法。<a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait%28%29" target="_blank">Object.wait()</a>方法会阻断当前线程的执行，直到其他线程调用<a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#notify%28%29" target="_blank">Object.notify()</a>。</p>
<p>于是可以很快的写出一个示例程序：</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> main(String[] args) {
    final Object syncObj = <span class="kwrd">new</span> Object();

    Thread thread = <span class="kwrd">new</span> Thread() {
        <span class="kwrd">public</span> <span class="kwrd">void</span> run() {
            <span class="kwrd">try</span> {
                Thread.sleep(3000);

                synchronized(syncObj) {
                    syncObj.notify();
                }
            } <span class="kwrd">catch</span> (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };

    thread.start();

    synchronized(syncObj) {
        <span class="kwrd">try</span> {
            syncObj.wait();
        } <span class="kwrd">catch</span> (InterruptedException e) {
            e.printStackTrace();
        }
    }

    System.<span class="kwrd">out</span>.println(<span class="str">&quot;Exit&quot;</span>);
}</pre>
<p>&#160;</p>
<p>调用wait和notify方法前，一定要用synchronized(syncObj)，否则会抛出IllegalMonitorStateException。</p>
<p>有空再写写Concurrence Util里的工具类，简化上面的操作。<br />
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style></p>
<h3>相关文章</h3>
<ol>
		<li><a href="http://www.agilephp.net/2009/12/linux-unix-benchmark/" rel="bookmark">Linux\Unix性能测试</a><!-- (21)--></li>
		<li><a href="http://www.agilephp.net/2010/01/fix-chrome-to-add-extensions-in-a-junction-folder/" rel="bookmark">使用mklink或junction后Chrome无法安装扩展的解决办法</a><!-- (14)--></li>
		<li><a href="http://www.agilephp.net/2009/11/couchdb-on-centos-5-4/" rel="bookmark">在CentOS 5.4上安装CouchDB</a><!-- (13.5)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2009/10/java-wait-and-notify/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

