Skip to content
线程是实现了Runnable接口或继承了Thread类的对象,能与Java程序的其他部分同时运行;

线程让程序能够更高效地利用其资源,这是通过将程序的计算密集型部分分离开来,避免其降低程序其他部分的速度来实现的。

使用Java进行编程时,需要考虑的问题之一是如何使用系统资源。

线程是程序的一部分,它们在程序的其他代码执行其他工作时独立运行。这也被称为多任务,因为程序同时处理多项任务。

线程适用于完成占用大量处理时间且连续运行的任务。通过将程序中最艰难的任务放到线程中,可以让程序的其他部分处理其他任务。这也使JVM能够更容易地对程序进行处理,因为大部分处理器密集型工作都被隔离了。

**编写线程化程序**
在Java中,线程是用包java.lang中的Thread类实现的。
最简单的线程用法是,让程序暂停一段时间,并在此期间处理空闲状态。为此,可以调用Thread类的sleep(long)方法,并将要暂停的时间(单位为毫秒)作为参数传递给它。

如果被暂停的线程由于某种原因而被中段,该方法将引发InterruptedException异常(一种可能是原因是,在该线程处于休眠状态时,用户关闭了程序)。

下面的语句让程序暂停3秒:
try {
Thread.sleep(3000);
} catch (InterruptedException ie) {
//do nothing
}
catch 块没有执行任何操作,您使用sleep()时,通常都这样做。

线程的用途之一是,将所有耗时的行为都放到单独的类中。

创建线程的方式有两种:创建一个从Thread派生而来的类;在另一个类中实现Runable接口。Thread类和Runable接口都位于java.lang包中。

由于Thread类实现了接口Runable,因此以这两种方法创建的对象将以相同的方式启动和终止线程。
要实现Runnable接口,将关键字implements加入到类声明中,并在后面加上接口名称,如下例所示:
public class StockTicker implements Runnable {
public void run() {
 }
}
Runnable接口只包含一个方法:run();
创建线程的第一步是创建一个到Thread对象的引用:
Thread runner;
上述语句创建一个线程引用,但还没有将Thread对象赋予它。要创建线程,可调用构造函数Thread(Object),并将要线程化的对象作为参数传递给它。下面语句创建了一个线程化的StockTicker对象:
StockTicker tix = new StockTicker();
Thread tickerThread = new Thread(tix);
适合创建线程的两个地方是应用程序的构造函数和组件(如面板)的构造函数。

要启动线程,可调用它的start()方法,如下面的语句所示:
tickerThread.start();
下面的语句可用在线程类中启动线程:
Thread runner = null;
if (runner == null) {
  runner = new Thread(this);
runner.start();
}
构造函数Thread()中的关键词this指的是包含这些语句的对象。将对象赋给变量runner之前,它的值为null,因为if语句确保线程不会被多次启动。

要运行线程,可调用其start()方法。调用线程的start()方法将导致另一个方法——run()被调用。线程化对象中必须包含run()方法。

run()方法是线程类的引擎,它包含处理器密集型行为并调用执行这种行为的方法。

本站总访问 — 次