📄 java08_03.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"> 下面我们来看一个具体的例子:</p>
<p align="left">//===这是myThread.java文件<br>
public class myThread extends Thread{<br>
private static int count=0;<br>
public void run(){<br>
int i;<br>
for(i=0;i<100;i++)<br>
{count++;<br>
System.out.println("My name is "+getName()+" count= "+count);<br>
try{<br>
sleep(100);<br>
}catch (InterruptedException e) {} <br>
} <br>
}<br>
<br>
public myThread(String name)<br>
{<br>
super(name);<br>
}<br>
}<br>
</p>
<p align="left">//这是测试用的mulThread.java文件<br>
public class mulThread{<br>
public static void main(String argv[]){<br>
myThread trFirst,trSecond;<br>
trFirst=new myThread("First Thread");<br>
trSecond=new myThread("Second Thread");<br>
trFirst.start();<br>
trSecond.start();<br>
}<br>
}</p>
<p align="left">注意:这个程序的输出是不可预测的。静态变量count可用于各个线程之间的通讯。</p>
<p align="left">除了继承Thread类,还有一种方法:实现Runnable接口。Runnable接口中只有一个方法:run(),因此只要实现了该方法,就可以写成多线程的形式。但问题是,Thread所拥有的其它辅助方法都不存在,如果全部由程序员来实现,就过于繁琐。因此实现Runnable的类中,通常都会有Thread类的对象,然后利用Thread的构<font size="4">造方法:<code>Thread(Runnable target)或Thread(Runnable target, String name)来指定要运行的run()方法。这样就还可以使用Thread类中定义好的方法。下面是一个例子:</code></font></p>
<p align="left">//这是改动后的myThread.java文件<br>
public class myThread implements Runnable{<br>
private static int count=0;<br>
private Thread trval;<br>
<br>
public void run(){<br>
int i;<br>
for(i=0;i<100;i++)<br>
{ count++;<br>
System.out.println("My name is "+trval.getName()+" count= "+count);<br>
try{<br>
trval.sleep(100);<br>
}catch (InterruptedException e) { }<br>
} <br>
}<br>
<br>
public myThread(String name){<br>
trval=new Thread(this,name);<br>
}<br>
<br>
public void start(){<br>
trval.start();<br>
}<br>
}</p>
<p align="left">//这是测试用的mulThread.java文件<br>
public class mulThread{<br>
public static void main(String argv[]){<br>
myThread trFirst,trSecond;<br>
trFirst=new myThread("First Thread");<br>
trSecond=new myThread("Second Thread");<br>
trFirst.start();<br>
trSecond.start();<br>
}<br>
}</p>
<p align="left">
这个程序和前面的程序完成同样的功能,不过这个程序明显要比前面的麻烦一些。那么,到底在什么时候使用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 + -