线程是一个程序的多个执行路径,执行调度的单位,依托于进程存在。 线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。
注意:Java中的多线程是一种抢占机制而不是分时机制。抢占机制指的是有多个线程处于可运行状态,但是只允许一个线程在运行,他们通过竞争的方式抢占CPU。
定义一个线程(Defining a Thread)有两种方法
/**
* 使用继承java.lang.Thread类的方式创建一个线程
*
* @author DreamSea 2011-12-29 20:17:06
*/
public class ThreadTest extends Thread {
/**
* 重写(Override)run()方法 JVM会自动调用该方法
*/
public void run() {
System.out.println("I'm running!");
}
}
注意:重写(override)run()方法在该线程的start()方法被调用后,JVM会自动调用run方法来执行任务;但是重载(overload)run()方法,该方法和普通的成员方法一样,并不会因调用该线程的start()方法而被JVM自动运行。 例如:
public class ThreadTest extends Thread {
/**
* 重写(Override)run()方法 JVM会自动调用该方法
*/
@Override
public void run() {
System.out.println("I'm running!");
}
/**
* 重载(Overload)run()方法 和普通的方法一样,并不会在该线程的start()方法被调用后被JVM自动运行
*/
public void run(int times) {
System.out.println("I'm running!(Overload)");
}
}
不建议使用此方法定义线程,因为采用继承Thread的方式定义线程后,你不能在继承其他的类了,导致程序的可扩展性大大降低。
/**
* 通过实现Runnable接口创建一个线程
* @author DreamSea
*/
public class ThreadTest implements Runnable {
public void run() {
System.out.println("I'm running!");
}
}
任何一个线程的执行的前提都是必须有Thread class的实例存在,并且通过调用run()方法启动线程。
1)如果线程是继承Thread类,则创建方式如下:
ThreadTest1 tt = new ThreadTest1();
tt.start();
2)如果是实现Runnable接口,则创建方式如下:
ThreadTest2 tt = new ThreadTest2();
Thread t = new Thread(tt);
t.start();
转载自:
Java Thread 总结
拓展阅读:
Java Thread 用法实例