线程是程序中的一个执行线程。java虚拟机允许应用程序具有多个线程执行并发运行。
每个线程都有优先权。优先级较高的线程优先于优先级较低的线程执行。
每个线程可能或可能不被标记为守护进程。
当代码运行时一些线程创建一个新的Thread对象,新的线程的优先级最初设置等于
它的创建线程,当创建线程是一个守护线程,它也是守护线程
当一个java虚拟机启动时,通常有一个单一的非守护进程线程(通常调用名为某些指定类的main
java虚拟机器继续执行线程,直到以下任一个发生:
1、Runtime的exit方法以及被调用 并且安全管理器允许退出操作发生。
2、不是守护线程线程的所有线程都已死亡,从调用返回到run方法或通过抛出传播超出run方法的异常。
有两种方法来创建一个新的执行线程。
一是
将类声明为Thread的子类。这个
*子类应该重写类的Runnable方法
然后子类的实例可以是分配和启动。
例如,一个计算素数大于规定值的线程可写如下:
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();
*创建线程的另一种方法是声明一个类实现<代码> Runnaby<代码>接口。
*然后被分配,在创建时作为参数传递
那个类实现runnable方法。当创建并启动线程时,类的一个实例被分配,并作为参数传递
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();
*每个线程都有用于标识目的的名称。
不止一个线程可能具有相同的名称。如果未指定名称时创建一个线程,为它生成一个新名称。
*除非另有说明,将{@代码null }参数传递给构造函数。或该类中的方法将导致NullPointerException