﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-も智军ミ    心系java-文章分类-java_多线程</title><link>http://www.blogjava.net/zj474097500/category/46951.html</link><description> Java的魅力：跨平台、动态的Web、Internet计算
            Java在Web、移动设备以及云计算方面前景广阔
      我的java编程不是梦！！！</description><language>zh-cn</language><lastBuildDate>Mon, 08 Nov 2010 06:05:14 GMT</lastBuildDate><pubDate>Mon, 08 Nov 2010 06:05:14 GMT</pubDate><ttl>60</ttl><item><title>多线程中Thread类和Runnable接口</title><link>http://www.blogjava.net/zj474097500/articles/337512.html</link><dc:creator>セ智军ミ</dc:creator><author>セ智军ミ</author><pubDate>Mon, 08 Nov 2010 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/zj474097500/articles/337512.html</guid><wfw:comment>http://www.blogjava.net/zj474097500/comments/337512.html</wfw:comment><comments>http://www.blogjava.net/zj474097500/articles/337512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zj474097500/comments/commentRss/337512.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zj474097500/services/trackbacks/337512.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天刚接触了java中的多线程，感觉这方面对以后很多程序的操作都很有帮助，即相当于程序的同时运行。现在就于我对多线程中Thread类和Runnable接口的初步认识，给大家做个简单的认识：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ffcc99">&nbsp;&nbsp;<span style="color: #003366">&nbsp;1、从JDK文档中可以发现Thread类实际上也是实现了Runnable；</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/zj474097500/w.png" width="365" height="300" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #003366">2、用Thread继承而来的线程，一个线程序对象只能启动一次，无论调用多少遍start（）方法，结果都只有一个线程；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注：sart（）方法是使该线程开始执行，java虚拟机调用该线程的run（）方法，也可以调用被子类覆盖写过的方法。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、实现Runnable接口比继承Thread类的好处：①适合多个相同程序代码的线程去处理同一资源的情况，也能避免由于java<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单线程处理带来的局限，即处理更为灵活。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②有利于程序的健壮性，能实现资源的共享。<br />
<br />
<br />
<span style="color: #ff0000"><br />
第一种方式：继承Thread类<br />
<p style="font-family: Courier; color: #c0c0c0"><span style="color: #000000"><span style="color: #999999"><span style="color: #999999">class MyThread extends Thread{<br />
&nbsp;//线程延迟时间<br />
&nbsp;private int time;<br />
&nbsp;//线程的名字由Thread累自行管理<br />
&nbsp;public MyThread(String name,int time){<br />
&nbsp;&nbsp;//调用Thread类中的构造方法，设置线程的名字<br />
&nbsp;&nbsp;super(name);<br />
&nbsp;&nbsp;this.time=time;<br />
&nbsp;}<br />
&nbsp;public void run(){<br />
&nbsp;&nbsp;for(int i=0;i&lt;10;i++){<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(this.time);<br />
&nbsp;&nbsp;&nbsp;} catch (InterruptedException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;this.printMsg();<br />
&nbsp;&nbsp;}<br />
&nbsp;}</span></span></span></p>
<p><span style="color: #000000"><span style="color: #808080"><span style="font-family: Courier"><span style="color: #999999"><span style="color: #999999">&nbsp;public void printMsg(){<br />
&nbsp;&nbsp;System.out.println (Thread.currentThread().getName()+"--&gt;***正在运行***"+this.time+"秒");<br />
&nbsp;}<br />
}<br />
public class Demo {<br />
&nbsp;public static void main(String[] args){<br />
&nbsp;&nbsp;MyThread mt = new MyThread("AA",100);<br />
&nbsp;&nbsp;MyThread mt1 = new MyThread("BB",200);<br />
&nbsp;&nbsp;MyThread mt2 = new MyThread("CC",300);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;mt.start();<br />
&nbsp;&nbsp;mt1.start();<br />
&nbsp;&nbsp;mt2.start();<br />
&nbsp;}<br />
}</span></span></span></span></span></p>
运行结果：<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/zj474097500/r.png" width="450" height="549" /><br />
<br />
<br />
<br />
第二方式：实现Ruanable接口<br />
<br />
<p><span style="color: #c0c0c0"><span style="font-family: Courier"><span style="color: #999999">class MyThread1 implements Runnable{<br />
&nbsp;private String name;<br />
&nbsp;private int time;<br />
&nbsp;&nbsp;&nbsp; public MyThread1(String name,int time){<br />
&nbsp;&nbsp;&nbsp; &nbsp;this.name= name;<br />
&nbsp;&nbsp;&nbsp; &nbsp;this.time=time;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;public void run(){<br />
&nbsp;&nbsp;for(int i=0;i&lt;10;i++){<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(this.time);<br />
&nbsp;&nbsp;&nbsp;} catch (InterruptedException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;this.printMsg();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;public void printMsg(){<br />
&nbsp;&nbsp;System.out.println (this.name+"--&gt;***正在运行***"+this.time+"秒");<br />
&nbsp;}<br />
}<br />
public class DemoF {<br />
&nbsp;public static void main(String[] args){<br />
&nbsp;&nbsp;MyThread mt = new MyThread("AA",100);<br />
&nbsp;&nbsp;MyThread mt1 = new MyThread("BB",200);<br />
&nbsp;&nbsp;MyThread mt2 = new MyThread("CC",300);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;mt.start();<br />
&nbsp;&nbsp;mt1.start();<br />
&nbsp;&nbsp;mt2.start();<br />
&nbsp;}</span></span></span></p>
<p><span style="font-family: Courier"><span style="color: #999999">}</span></span><span style="color: #c0c0c0"><br />
<br />
<span style="color: #ff0000">运行结果：类同于上一种方法的结果，只是出的顺序不相同<br />
</span></span></span></span></p>
<img src ="http://www.blogjava.net/zj474097500/aggbug/337512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zj474097500/" target="_blank">セ智军ミ</a> 2010-11-08 11:41 <a href="http://www.blogjava.net/zj474097500/articles/337512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>