⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java08_03.htm

📁 JAVA的课件
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java程序设计</title>
</head>

<body background="Bg.gif">

<p align="center"><font size="5"><b>§8.3如何实现多线程</b></font></p>

<p align="left"> 不管用创建Thread类的子类方法还是用实现Runnable接口的方法来实现多线程,程序员要做的关键性操作有两个:</p>
<ol>
  <li>
    <p align="left">定义用户线程的操作,也就是定义用户线程的run()方法。</li>
  <li>
    <p align="left">在适当的时候建立用户线程实例。</li>
</ol>
<p align="left">&nbsp;&nbsp;&nbsp; 下面我们来看一个具体的例子:</p>
<p align="left">//===这是myThread.java文件<br>
public class myThread extends Thread{<br> 
&nbsp;private static int count=0;<br> 
&nbsp;public void run(){<br> 
&nbsp; int i;<br> 
&nbsp; for(i=0;i&lt;100;i++)<br>
&nbsp; {count++;<br>
&nbsp;&nbsp; System.out.println("My name is "+getName()+" count= "+count);<br> 
&nbsp;&nbsp; try{<br>
&nbsp;&nbsp;&nbsp; sleep(100);<br>
&nbsp;&nbsp; }catch (InterruptedException e) {}&nbsp;<br>
&nbsp; }&nbsp;<br>
 }<br>
<br>
&nbsp;public myThread(String name)<br> 
&nbsp;{<br>
&nbsp;&nbsp;&nbsp; super(name);<br>
&nbsp;}<br>
}<br>
</p>
<p align="left">//这是测试用的mulThread.java文件<br>
public class mulThread{<br> 
&nbsp; public static void main(String argv[]){<br> 
&nbsp;&nbsp;&nbsp; myThread trFirst,trSecond;<br> 
&nbsp;&nbsp;&nbsp; trFirst=new myThread("First Thread");<br> 
&nbsp;&nbsp;&nbsp; trSecond=new myThread("Second Thread");<br> 
&nbsp;&nbsp;&nbsp; trFirst.start();<br>
&nbsp;&nbsp;&nbsp; trSecond.start();<br>
&nbsp; }<br>
}</p>
<p align="left">注意:这个程序的输出是不可预测的。静态变量count可用于各个线程之间的通讯。</p>
<p align="left">除了继承Thread类,还有一种方法:实现Runnable接口。Runnable接口中只有一个方法:run(),因此只要实现了该方法,就可以写成多线程的形式。但问题是,Thread所拥有的其它辅助方法都不存在,如果全部由程序员来实现,就过于繁琐。因此实现Runnable的类中,通常都会有Thread类的对象,然后利用Thread的构<font size="4">造方法:<code>Thread(Runnable&nbsp;target)或Thread(Runnable&nbsp;target, String&nbsp;name)来指定要运行的run()方法。这样就还可以使用Thread类中定义好的方法。下面是一个例子:</code></font></p>
<p align="left">//这是改动后的myThread.java文件<br>
public class myThread implements Runnable{<br> 
&nbsp;private static int count=0;<br> 
&nbsp;private Thread trval;<br> 
<br>
&nbsp;public void run(){<br> 
&nbsp;&nbsp;&nbsp; int i;<br> 
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;100;i++)<br>
&nbsp;&nbsp;&nbsp; { count++;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("My name is "+trval.getName()+" count= "+count);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trval.sleep(100);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch (InterruptedException e) {&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }&nbsp;<br>
&nbsp;}<br>
<br>
&nbsp;public myThread(String name){<br> 
&nbsp;&nbsp;&nbsp; trval=new Thread(this,name);<br> 
&nbsp;}<br>
<br>
&nbsp;public void start(){<br> 
&nbsp;&nbsp;&nbsp; trval.start();<br>
&nbsp;}<br>
}</p>
<p align="left">//这是测试用的mulThread.java文件<br>
public class mulThread{<br> 
&nbsp;  public static void main(String argv[]){<br> 
&nbsp;&nbsp;&nbsp;    myThread trFirst,trSecond;<br> 
&nbsp;&nbsp;&nbsp; trFirst=new myThread("First Thread");<br> 
&nbsp;&nbsp;&nbsp;    trSecond=new myThread("Second Thread");<br> 
&nbsp;&nbsp;&nbsp;    trFirst.start();<br> 
&nbsp;&nbsp;&nbsp;    trSecond.start();<br> 
&nbsp;  }<br> 
}</p>
<p align="left">&nbsp;&nbsp;&nbsp; 
这个程序和前面的程序完成同样的功能,不过这个程序明显要比前面的麻烦一些。那么,到底在什么时候使用Thread类,在什么时候使用Runnable接口呢?由于Java不支持多重继承,所以当某类已经是某个类的子类而同时又要完成多线程任务时,就可以考虑实现Runnable接口。典型的例子是Applet程序,由于所有的Applet程序都必须是Applet的子类,所以如果要实现多线程任务的话,就只能实现Runnable接口了。</p>
<p align="left"><a href="index.htm">回目录</a>   <a href="java08_02.htm">上一课</a> 
<a href="java08_04.htm">下一课</a></p>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -