Thread 和 Runnable 介绍
Thread
线程是程序中的执行线程, Java 虚拟机允许应用程序具有多个并发运行的执行线程。
每个线程都有一个优先级。具有较高优先级的线程优先于具有较低优先级的线程执行。 每个线程可能会也可能不会被标记为守护程序 。 在某个线程中运行的代码创建新的 Thread 对象时 , 新线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护程序时,它才是守护程序线程 。
Java 虚拟机启动时,通常只有一个非守护线程(通常会调用某些指定类的名为 main 的方法 )。 Java 虚拟机将继续执行线程,直到发生以下任何一种情况:
- 调用了 Runtime 类的退出方法,并且安全管理器允许进行退出操作。
- 不是守护程序线程的所有线程都已死亡,要么通过从调用返回到 run 方法,要么通过抛出传播到 run 方法之外的异常引发。
有两种方法可以创建新的执行线程。一种是将一个类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。然后可以分配并启动子类的实例。例如,计算素数大于指定值的线程可以编写如下:
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
PrimeThread p = new PrimeThread(143);
p.start();
创建线程的另一种方法是声明一个实现 Runnable 接口的类。然后,该类实现 run 方法。然后可以分配该类的实例,在创建 Thread 时将其作为参数传递并启动。其他样式的相同示例如下所示:
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
每个线程都有一个名称供识别。一个以上的线程可能具有相同的名称。如果在创建线程时未指定名称,则会为其生成一个新名称。
Runable
public interface Runnable
Runnable 接口应该由实例打算由线程执行的任何类实现。该类必须定义一个没有参数的方法,称为 run。
该接口旨在为希望在活动状态下执行代码的对象提供通用协议。例如,Runnable 由 Thread 类实现。处于活动状态仅表示线程已启动但尚未停止。
另外,Runnable 提供了一种在不继承 Thread 的情况下使类处于活动状态的方法。实现 Runnable 的类可以通过将其自身作为目标传递实来实例化 Thread 实例,而无需继承 Thread 的子类来运行。在大多数情况下,如果您仅打算覆盖 run() 方法而没有其他 Thread 方法,则应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应将类归为子类。
参考
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论