<?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; easewalk</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/easewalk/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/24/400008109/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/06/24/400008109/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 09:00:37 +0000</pubDate>
		<dc:creator>easewalk</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/06/24/400008109/</guid>
		<description><![CDATA[  现在的我们打开电脑，可以同时运行多个程序，比如、在听音乐的同时，还在聊天，当然还有玩游戏等等。 大家打开任务管理器工具后，就能点到进程选项卡，就会发现：我们没有运行多少个程序，但是，在列表里面，一般都多达几十个进程。每一个进行都对应一个应用程序。然后，再点到性能选项卡，看到左下角的总数分组框中，会发现：线程数远远多于进程数。 这是为什么呢？就是因为，我们的程序，如果是多进程，同样能够同时运行很多程序，但是，进程是直接 独占 硬件资源的，所以，进程数越多，电脑的剩余资源就越少，电脑就越慢。但是我们同一个程序，能同时做很多事情，比如，QQ聊天软件，在和这人聊天的同时，另一个好友发信息来了，是不是都能同时收到？难道，每一个窗口，都要去开一个独立的进程？那样的话，如果，聊天的窗口一多。电脑都只能聊 QQ 了 ... 但是我们发现，即使QQ的聊天窗口很多，但是卡的话，只会QQ卡，其他程序不会卡。这是为什么呢？这里就引入了我们的线程！ 为什么需要线程呢？有些任务必须由线程来执行，像播放器在播放的时候，调用一个线程去播放，肯定还要能够在播放的时候，可以暂停或停止，那么这些按钮功能也要有线程来和播放同步执行。一些任务可以在后台运行一些任务本身是多线程的，像播放视频的时候，肯定还要有声音吧？那一个线程播放画面，另一个线程播放声音。一些任务可以被细分，从而接受并行处理。 那么什么是线程呢？我们可以把一个线程看成一个独立的虚拟的小电脑。这个虚拟的小电脑由我们来创建，并让它按照我们的控制流去执行。而所有的线程都是在进程内部的，所以，线程分享的是进程分得硬件的资源。也就是说，线程再多(这里用到了再多，就是表明了，线程可以创建多个的)，也不会影响除包含该线程的进程以外的程序。 那么线程既然这么好，是不是很难呢？我们来看看线程的两种方式： 方式一：继承Thread类 //继承Thread类 public class MyThread extends Thread{ //重写Thread实现的Runnable的run方法，因为Thread自身也实现了Runnable接口 public void run(){ //这里写上我们创建了该线程后，要执行的代码 } public static void main(String [] args){ MyThread mt = new MyThread(); //注意，我们这里调用的是start方法，是因为，线程创建以后，还要做一系列的初始化工作，这些工作就交给了start方法，初始化完毕后，start会自动调用run方法。 mt.start(); } } 方式二：实现Runnable接口 public class MyRunnable implements Runnable{ //重写Runnable的run方法 public void run(){ //这里写上我们创建了该线程后，要执行的代码 } public static [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>现在的我们打开电脑，可以同时运行多个程序，比如、在听音乐的同时，还在聊天，当然还有玩游戏等等。</p>
<p>大家打开任务管理器工具后，就能点到进程选项卡，就会发现：我们没有运行多少个程序，但是，在列表里面，一般都多达几十个进程。每一个进行都对应一个应用程序。然后，再点到性能选项卡，看到左下角的总数分组框中，会发现：线程数远远多于进程数。</p>
<p>这是为什么呢？就是因为，我们的程序，如果是多进程，同样能够同时运行很多程序，但是，进程是直接 独占 硬件资源的，所以，进程数越多，电脑的剩余资源就越少，电脑就越慢。但是我们同一个程序，能同时做很多事情，比如，QQ聊天软件，在和这人聊天的同时，另一个好友发信息来了，是不是都能同时收到？难道，每一个窗口，都要去开一个独立的进程？那样的话，如果，聊天的窗口一多。电脑都只能聊 QQ 了 ... 但是我们发现，即使QQ的聊天窗口很多，但是卡的话，只会QQ卡，其他程序不会卡。这是为什么呢？这里就引入了我们的线程！</p>
<p>为什么需要线程呢？有些任务必须由线程来执行，像播放器在播放的时候，调用一个线程去播放，肯定还要能够在播放的时候，可以暂停或停止，那么这些按钮功能也要有线程来和播放同步执行。一些任务可以在后台运行一些任务本身是多线程的，像播放视频的时候，肯定还要有声音吧？那一个线程播放画面，另一个线程播放声音。一些任务可以被细分，从而接受并行处理。</p>
<p>那么什么是线程呢？我们可以把一个线程看成一个独立的虚拟的小电脑。这个虚拟的小电脑由我们来创建，并让它按照我们的控制流去执行。而所有的线程都是在进程内部的，所以，线程分享的是进程分得硬件的资源。也就是说，线程再多(这里用到了再多，就是表明了，线程可以创建多个的)，也不会影响除包含该线程的进程以外的程序。</p>
<p>那么线程既然这么好，是不是很难呢？我们来看看线程的两种方式：</p>
<p>方式一：继承Thread类</p>
<p>//继承Thread类<br />
public class MyThread extends Thread{</p>
<p>//重写Thread实现的Runnable的run方法，因为Thread自身也实现了Runnable接口<br />
public void run(){</p>
<p>//这里写上我们创建了该线程后，要执行的代码</p>
<p>}<br />
public static void main(String [] args){</p>
<p>MyThread mt = new MyThread();<br />
//注意，我们这里调用的是start方法，是因为，线程创建以后，还要做一系列的初始化工作，这些工作就交给了start方法，初始化完毕后，start会自动调用run方法。<br />
mt.start();</p>
<p>}</p>
<p>}</p>
<p>方式二：实现Runnable接口<br />
public class MyRunnable implements Runnable{<br />
//重写Runnable的run方法<br />
public void run(){</p>
<p>//这里写上我们创建了该线程后，要执行的代码</p>
<p>}</p>
<p>public static void main(String [] args){</p>
<p>//得到MyRunnable对象<br />
MyRunnable mr = new MyRunnable();<br />
//创建一个MyRunnable的线程对象<br />
Thread t = new Thread(mr);<br />
//启动线程<br />
t.start();</p>
<p>}<br />
}</p>
<p>线程的生命周期：新建一个对象----&gt;调用start方法让线程就绪---&gt;运 行----&gt;结束(死亡)<br />
↑ |<br />
| |<br />
| ↓<br />
←-----------------------阻塞</p>
<p>至于线程的同步等问题，后续再讲解。欢迎大家指正~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/06/24/400008109/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

