作者 Neel V Kumar
使用 Java 编程语言实现线程
Java 编程语言使多线程如此简单有效以致于某些程序员说它实际上是自然的尽管在 Java 中使用线程比在其他语言中要容易得多仍然有一些概念需要掌握要记住的一件重要的事情是 main() 函数也是一个线程并可用来做有用的工作程序员只有在需要多个线程时才需要创建新的线程
Thread 类
Thread 类是一个具体的类即不是抽象类该类封装了线程的行为要创建一个线程程序员必须创建一个从 Thread 类导出的新类程序员必须覆盖 Thread 的 run() 函数来完成有用的工作用户并不直接调用此函数而是必须调用 Thread 的 start() 函数该函数再调用 run()下面的代码说明了它的用法
创建两个新线程
import javautil*;
class TimePrinter extends Thread {
int pauseTime;
String name;
public TimePrinter(int x String n) {
pauseTime = x;
name = n;
}
public void run() {
while(true) {
try {
Systemoutprintln(name + : + new
Date(SystemcurrentTimeMillis()));
Threadsleep(pauseTime);
} catch(Exception e) {
Systemoutprintln(e);
}
}
}
static public void main(String args[]) {
TimePrinter tp = new TimePrinter( Fast Guy);
tpstart();
TimePrinter tp = new TimePrinter( Slow Guy);
tpstart();
}
}
在本例中我们可以看到一个简单的程序它按两个不同的时间间隔( 秒和 秒)在屏幕上显示当前时间这是通过创建两个新线程来完成的包括 main() 共三个线程但是因为有时要作为线程运行的类可能已经是某个类层次的一部分所以就不能再按这种机制创建线程虽然在同一个类中可以实现任意数量的接口但 Java 编程语言只允许一个类有一个父类同时某些程序员避免从 Thread 类导出因为它强加了类层次对于这种情况就要 runnable 接口
Runnable 接口
此接口只有一个函数run()此函数必须由实现了此接口的类实现但是就运行这个类而论其语义与前一个示例稍有不同我们可以用 runnable 接口改写前一个示例(不同的部分用黑体表示)
创建两个新线程而不强加类层次
import javautil*;
class TimePrinter implements Runnable {
int pauseTime;
String name;
public TimePrinter(int x String n) {
pauseTime = x;
name = n;
}
public void run() {
while(true) {
try {
Systemoutprintln(name + : + new
Date(SystemcurrentTimeMillis()));
Threadsleep(pauseTime);
} catch(Exception e) {
Systemoutprintln(e);
}
}
}
static public void main(String args[]) {
Thread t = new Thread(new TimePrinter( Fast Guy));
tstart();
Thread t = new Thread(new TimePrinter( Slow Guy));
tstart();
}
}
请注意当使用 runnable 接口时您不能直接创建所需类的对象并运行它必须从 Thread 类的一个实例内部运行它许多程序员更喜欢 runnable 接口因为从 Thread 类继承会强加类层次