14.11 StrictMath
在Java 2的1.3版本中增加了StrictMath类。这个类定义一个与Math中的数学方法类似的一套完整的数学方法。两者的区别在于StrictMath中的方法对所有Java工具保证产生精确一致的结果,而Math中的方法更大程度上是为了提高性能。
14.12 Compiler
Compiler类支持创建将字节码编译而非解释成可执行码的Java环境。常规的程序不使用它。
14.13 Thread,ThreadGroup和Runnable
Runnable接口以及Thread和ThreadGroup类支持多线程编程。下面分别予以说明。
注意:关于管理线程,实现Runnable接口以及创建多线程程序的概述已在第11章
中介绍过。
14.13.1 Runnable接口
Runnable接口必须由启动执行的独立线程的类所实现。Runnable仅定义了一种抽象方法,叫做run( )。该方法是线程的入口点。它的形式如下所示:
abstract void run( )
所创建的线程必须实现该方法。
14.13.2 Thread
Thread创建一个新的执行线程。它定义了如下的构造函数:
Thread( )
Thread(Runnable threadOb)
Thread(Runnable threadOb, StringthreadName)
Thread(String threadName)
Thread(ThreadGroup groupOb, Runnable threadOb)
Thread(ThreadGroup groupOb, Runnable threadOb, String threadName)
Thread(ThreadGroup groupOb, String threadName)
threadOb是实现Runnable接口的类的一个实例,它定义了线程运行开始的地方。线程的名字由threadName指定。当名字未被指定时,Java虚拟机将创建一个。groupOb指定了新线程所属的线程组。当没有线程组被指定时,新线程与其父线程属于同一线程组。
下面的常数由Thread定义:
MAX_PRIORITY
MIN_PRIORITY
NORM_PRIORITY
正如所期望的那样,这些常数指定了最大,最小以及默认的线程优先权。由Thread定义的方法列在表14-16中。在比Java 2早的版本中,Thread中也包括了stop( ),suspend( )以及resume( )方法。然而正如在第11章中解释的那样,这些方法由于其固有的不稳定性而在Java 2中被摈弃了。在Java 2中摈弃的还有countStackFrames( )方法,因为它调用了suspend( )方法。
表14-16 由Thread 定义的方法
方法 描述
static int activeCount( ) 返回线程所属的线程组中线程的个数
void checkAccess( ) 引起安全管理程序检验当前的线程能访问和/或能改变在其上checkAccess( )方法被调用的线程
static Thread currentThread( ) 返回一个Thread对象,该对象封装了调用这个方法的线程
void destroy( ) 终止线程
static int enumerate(Thread threads[ ]) 将当前线程组中的所有Thread对象的拷贝放入threads中。返回线程的个数
ClassLoader getContextClassLoader( ) 返回用于对这个线程加载类和资源的类加载程序(在Java 2中新增加的)
final String getName( ) 返回线程名
final int getPriority( ) 返回线程的属性设置
final ThreadGroup getThreadGroup( ) 返回调用线程是其中一个成员的ThreadGroup对象
void interrupt( ) 中断线程
static boolean interrupted( ) 如果当前执行的线程已经被预先设置了中断,则返回
true;否则,返回false
final boolean isAlive( ) 如果线程仍在运行中,则返回true;否则返回false
final boolean isDaemon( ) 如果线程是一个后台进程线程(Java运行系统的一部分),则返回true;否则返回false
boolean isInterrupted( ) 如果线程被中断,则返回true,否则返回false
final void join( )
throws InterruptedException
等待直至线程终止
续表
方法 描述
final void join(long milliseconds)
throws InterruptedException
等待直到为终止线程而指定的以毫秒计时的时间
final void join(long milliseconds, int nanoseconds)
throws InterruptedException
等待直到为终止线程而指定的以毫秒加毫微秒计时的时间
void run( ) 开始线程的执行
void setContextClassLoader(ClassLoader cl) 设置将被调用线程用于cl的类加载程序(在Java 2中新增加的)
final void setDaemon(boolean state) 标记线程为后台进程线程
final void setName(String threadName) 将线程的名字设置为由threadName指定的名字
final void setPriority(int priority) 设置由priority指定的线程优先权
static void sleep(long milliseconds)
throws InterruptedException
以指定的毫秒为单位的时间长度挂起执行的线程
static void sleep(long milliseconds,
int nanoseconds)
throws InterruptedException
以指定的毫秒加毫微秒为单位的时间长度挂起执行的线程
void start( ) 开始线程的执行
String toString( ) 返回线程的等价字符串形式