<?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; songlixing</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/songlixing/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Sat, 26 May 2012 06:34:24 +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/12/02/400009295/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/12/02/400009295/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 09:19:04 +0000</pubDate>
		<dc:creator>songlixing</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/12/02/400009295/</guid>
		<description><![CDATA[  一、程序与进程 1、程序：一段静态的代码。 2、进程：程序的一次动态执行过程，它对应从代码加载、执行到执行完毕的一个完整过程。 3、进程也称任务，支持多个进程同时执行的OS就被称为多进程OS或多任务OS。 二、进程与线程 在一个程序内部也可以实现多个任务并发执行，其中每个任务称为线程。 线程是比进程更小的执行单位，它是在一个进程中独立的控制流，即程序内部的控制流。 特点：线程不能独立运行，必须依赖于进程，在进程中运行。 每个程序至少有一个线程称为主线程。 单线程：只有一条线程的进程称为单线程 多线程：有不止一个线程的进程称为多线程 三、开启多线程的优点和缺点 提高界面程序响应速度。通过使用线程，可以将需要大量时间完成的流程在后台启动单独的线程完成，提高前台界面的相应速度。 充分利用系统资源，提高效率。通过在一个程序内部同时执行多个流程，可以充分利用CPU等系统资源，从而最大限度的发挥硬件的性能。 当程序中的线程数量比较多时，系统将花费大量的时间进行线程的切换，这反而会降低程序的执行效率。但是，相对于优势来说，劣势还是很有限的，所以现在的项目开发中，多线程编程技术得到了广泛的应用。 13.2 多线程实现 一、在实现线程编程时，首先需要让一个类具备多线程的能力，继承Thread类或实现Runnable接口的类具备多线程的能力，然后创建线程对象，调用对应的启动线程方法即可实现线程编程。 在一个程序中可以实现多个线程，多线程编程指在同一个程序中启动了两个或两个以上的线程。 在实际实现线程时，Java语言提供了三种实现方式： （1）继承Thread类 （2）实现Runnable接口 （3）使用Timer和TimerTask组合 二、继承Thread线程类实现多线程 java.lang包中提供了一个专门的线程类（Thread），在该类中封装了许多对线程进行调度和处理的方法。如果一个类继承了Thread类，则该类就具备了多线程的能力，可以多线程的方式执行。 class MyThread extends Thread{ public void run(){ //线程体 } } 继承Thread类实现多线程。 MyThread tt1 = new MyThread (); //启动线程 tt1.start(); try{ for(int i = 0;i &#60; 5;i++){ //延时1秒 Thread.sleep(1000); System.out.println("Main:" [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>一、程序与进程</p>
<p>1、程序：一段静态的代码。</p>
<p>2、进程：程序的一次动态执行过程，它对应从代码加载、执行到执行完毕的一个完整过程。</p>
<p>3、进程也称任务，支持多个进程同时执行的OS就被称为多进程OS或多任务OS。</p>
<p>二、进程与线程</p>
<p>在一个程序内部也可以实现多个任务并发执行，其中每个任务称为线程。</p>
<p>线程是比进程更小的执行单位，它是在一个进程中独立的控制流，即程序内部的控制流。</p>
<p>特点：线程不能独立运行，必须依赖于进程，在进程中运行。</p>
<p>每个程序至少有一个线程称为主线程。</p>
<p>单线程：只有一条线程的进程称为单线程</p>
<p>多线程：有不止一个线程的进程称为多线程</p>
<p>三、开启多线程的优点和缺点</p>
<p>提高界面程序响应速度。通过使用线程，可以将需要大量时间完成的流程在后台启动单独的线程完成，提高前台界面的相应速度。</p>
<p>充分利用系统资源，提高效率。通过在一个程序内部同时执行多个流程，可以充分利用CPU等系统资源，从而最大限度的发挥硬件的性能。</p>
<p>当程序中的线程数量比较多时，系统将花费大量的时间进行线程的切换，这反而会降低程序的执行效率。但是，相对于优势来说，劣势还是很有限的，所以现在的项目开发中，多线程编程技术得到了广泛的应用。</p>
<p>13.2 多线程实现</p>
<p>一、在实现线程编程时，首先需要让一个类具备多线程的能力，继承Thread类或实现Runnable接口的类具备多线程的能力，然后创建线程对象，调用对应的启动线程方法即可实现线程编程。</p>
<p>在一个程序中可以实现多个线程，多线程编程指在同一个程序中启动了两个或两个以上的线程。</p>
<p>在实际实现线程时，Java语言提供了三种实现方式：</p>
<p>（1）继承Thread类</p>
<p>（2）实现Runnable接口</p>
<p>（3）使用Timer和TimerTask组合</p>
<p>二、继承Thread线程类实现多线程<br />
java.lang包中提供了一个专门的线程类（Thread），在该类中封装了许多对线程进行调度和处理的方法。如果一个类继承了Thread类，则该类就具备了多线程的能力，可以多线程的方式执行。</p>
<p>class MyThread extends Thread{</p>
<p>public void run(){</p>
<p>//线程体</p>
<p>}</p>
<p>}</p>
<p>继承Thread类实现多线程。</p>
<p>MyThread tt1 = new MyThread ();</p>
<p>//启动线程</p>
<p>tt1.start();</p>
<p>try{</p>
<p>for(int i = 0;i &lt; 5;i++){</p>
<p>//延时1秒</p>
<p>Thread.sleep(1000);</p>
<p>System.out.println("Main:" + i);</p>
<p>}</p>
<p>}catch(Exception e){}</p>
<p>注意：</p>
<p>线程的特性：随机性，系统在执行多线程程序时只保证线程是交替执行的，至于哪个线程先执行哪个线程后执行，则无法获得保证，需要书写专门的代码才可以保证执行的顺序。</p>
<p>对于同一个线程类，也可以启动多个线程</p>
<p>同一个线程不能启动两次，</p>
<p>当自定义线程中的run方法执行完成以后，则自定义线程自然死亡。而对于系统线程来说，只有当main方法执行结束，而且启动的其它线程都结束以后，才会结束。当系统线程执行结束以后，程序的执行才真正结束。</p>
<p>三、 实现Runable接口</p>
<p>a) 多线程对象实现java.lang.Runnable接口并且在该类中重写Runnable接口的run方法。</p>
<p>b) 好处：实现Runable接口的方法避免了单继承的局限性。</p>
<p>例1：使用实现Runable接口的方式实现多线程。</p>
<p>class MyThread2 implements Runable{</p>
<p>public void run(){} //重写Runable接口中的run()方法</p>
<p>}</p>
<p>MyThread2 mt1=new MyThread2();</p>
<p>Thread t1=new Thread(mt1);</p>
<p>t1.start();</p>
<p>13.3 线程的生命周期</p>
<p>一、线程的生命周期</p>
<p>线程是一个动态执行的过程，它也有一个从产生到死亡的过程，这就是所谓的生命周期。一个线程在它的生命周期内有5种状态：</p>
<p>1、新建（new Thread）</p>
<p>当创建Thread类的一个实例（对象）时，此线程进入新建状态（未被启动）。<br />
例如：Thread t1=new Thread();</p>
<p>2、就绪（runnable）</p>
<p>线程已经被启动，正在等待被分配给CPU时间片，也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如：t1.start();</p>
<p>3、运行（running）</p>
<p>线程获得CPU资源正在执行任务（run()方法），此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入，线程将一直运行到结束。</p>
<p>4、死亡（dead）</p>
<p>当线程执行完毕或被其它线程杀死，线程就进入死亡状态，这时线程不可能再进入就绪状态等待执行。</p>
<p>自然终止：正常运行run()方法后终止</p>
<p>异常终止：调用stop()方法让一个线程终止运行</p>
<p>5、堵塞（blocked）</p>
<p>由于某种原因导致正在运行的线程让出CPU并暂停自己的执行，即进入堵塞状态。</p>
<p>正在睡眠：用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。</p>
<p>正在等待：调用wait()方法。（调用motify()方法回到就绪状态）</p>
<p>被另一个线程所阻塞：调用suspend()方法。（调用resume()方法恢复）</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/12/02/400009295/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

