<?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>中文 &#187; daijopea</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/daijopea/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 13:40:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>多线程详解，同步，死锁，等待-通知</title>
		<link>http://software.intel.com/zh-cn/blogs/2011/06/28/400008140/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/06/28/400008140/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 04:46:51 +0000</pubDate>
		<dc:creator>daijopea</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/06/28/400008140/</guid>
		<description><![CDATA[  1.多线程的两种实现--class A extends Thread,class B implements Runnable---对应的两种启动方法分别是A a = new A();a.start();---B b = new B();new Tread(b).start(); 两种方法都要实现public void run() {}; 2.几个函数， long getId () 返回该线程的标识符。 String getName () 返回该线程的名称。 int getPriority () 返回线程的优先级。 3.线程安全 使用关键字synchronized，有两种同步形式分别是同步方法也同步块。 4.线程死锁， 代码示例： class MultiThread { public static void main(String[] args) { SellThread st = new SellThread(); new Thread(st).start(); try [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>1.多线程的两种实现--class A extends Thread,class B implements Runnable---对应的两种启动方法分别是A a = new A();a.start();---B b = new B();new Tread(b).start();</p>
<p>两种方法都要实现public void run() {};</p>
<p>2.几个函数，</p>
<p>long getId ()<br />
返回该线程的标识符。<br />
String getName ()<br />
返回该线程的名称。<br />
int getPriority ()<br />
返回线程的优先级。<br />
3.线程安全</p>
<p>使用关键字synchronized，有两种同步形式分别是同步方法也同步块。</p>
<p>4.线程死锁，</p>
<p>代码示例：</p>
<p>class MultiThread {<br />
public static void main(String[] args) {<br />
SellThread st = new SellThread();<br />
new Thread(st).start();<br />
try {<br />
Thread.sleep(1);<br />
}<br />
catch(Exception e) {<br />
e.printStackTrace();<br />
}<br />
st.b = true;<br />
new Thread(st).start();<br />
//new Thread(st).start();<br />
//new Thread(st).start();</p>
<p>}</p>
<p>}<br />
class SellThread implements Runnable {</p>
<p>int tickets = 100;<br />
boolean b = false;<br />
Object obj = new Object();<br />
public void run() {<br />
if(b == false) {<br />
while(true) {<br />
sell();<br />
}<br />
}<br />
while(true) {<br />
synchronized(obj) {//obj----this<br />
try {<br />
Thread.sleep(10);<br />
}<br />
catch(Exception e) {<br />
e.printStackTrace();<br />
}<br />
synchronized(this) {<br />
if(tickets&gt;0) {<br />
System.out.println("obj" + Thread.currentThread().getName() + "sell tickets:" + tickets);<br />
tickets--;<br />
}<br />
}<br />
}<br />
sell();<br />
}<br />
}<br />
public synchronized void sell() {<br />
if(tickets&gt;0) {<br />
synchronized(obj) {<br />
try {<br />
Thread.sleep(10);<br />
}<br />
catch(Exception e) {<br />
e.printStackTrace();<br />
}<br />
System.out.println("this" + Thread.currentThread().getName() + "sell tickets:" + tickets);<br />
tickets--;<br />
}<br />
}<br />
}<br />
}</p>
<p>上面两个线程互相等待各自的锁所以会出现死锁现象</p>
<p>5.wait() 与 notify();</p>
<p>代码示例：</p>
<p>class Test {<br />
public static void main(String[] args) {<br />
Queue q = new Queue();<br />
Producer p = new Producer(q);<br />
Consumer c = new Consumer(q);<br />
p.start();<br />
c.start();<br />
}</p>
<p>}<br />
class Producer extends Thread {<br />
Queue q;<br />
Producer(Queue q) {<br />
this.q = q;<br />
}<br />
public void run() {<br />
for(int i=0;i&lt;10;i++) {<br />
q.put(i);<br />
System.out.println("Producer put" + i);<br />
}<br />
}<br />
}</p>
<p>class Consumer extends Thread {<br />
Queue q;<br />
Consumer(Queue q) {<br />
this.q = q;<br />
}<br />
public void run() {<br />
while(true) {<br />
System.out.println("Consumer:" + q.get());<br />
}</p>
<p>}<br />
}<br />
class Queue {<br />
int value;<br />
boolean b = false;<br />
public synchronized void put(int i) {<br />
if(b == false) {<br />
value = i;<br />
b = true;<br />
notify();<br />
}<br />
try{<br />
wait();<br />
}<br />
catch(Exception e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
public synchronized int get() {<br />
if(b == false) {<br />
try {<br />
wait();<br />
}<br />
catch(Exception e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
b = false;<br />
notify();<br />
return value;</p>
<p>}</p>
<p>}</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/06/28/400008140/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

