线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。
每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread
对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。
当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main
方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:
- 调用了
Runtime
类的exit
方法,并且安全管理器允许退出操作发生。 - 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到
run
方法之外的异常。实现java线程的两种方法
package test.java; /** * 一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run * 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成 * @author KING */ public class Thread1 extends Thread { private int i; private String name; public void run() { for (i = 0; i < 10; i++) System.out.println("name=" + name + ",i=" + i); i++; } public static void main(String[] args) { Thread1 th1 = new Thread1(); th1.name = "th1"; Thread1 th2 = new Thread1(); th2.name = "th2"; th1.start(); th2.start();
其二://这里需要注意千万不能像下面这样写,这里run,只是重写了父类中的方法,调用run只是调用一个普通的方法,并不能开启一个线程 // th1.run(); // th2.run(); }
package test.java; /** * 创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread * 时作为一个参数来传递并启动。采用这种风格的同一个例子如下所示: * @author KING */ public class Thread2 implements Runnable { private int i; private String name; public static void main(String[] args) { Thread2 th1 = new Thread2(); th1.name = "th1"; Thread2 th2 = new Thread2(); th2.name = "th2"; new Thread(th1).start(); new Thread(th2).start(); } @Override public void run() { for (i = 0; i < 10; i++) System.out.println("name=" + name + ",i=" + i); i++; } }
----上面的文字描述大都来自java API1.6