线程是一个程序里不同的执行路径。
进程是一个class文件或.exe文件,是一个静态概念,本身不能动。
我们平常讲的进程的执行,是指进程里的主线程开始执行了(main方法执行了)。在我们机器里面,实际上运行的都是线程。DOS只执行单进程,其它的操作系统都是支持多线程(当然也支持多进程)。但一个时间点上一个CPU只能执行了一个线程。所以真正意义上的多线程是指双核、双CPU。
JAVA中的线程是JAVA.LANG.Thread类来实现的。
启用Thread线程有两种方式:
第一种:定义线程类实现Runnable接口。
例子:
public class TestThread1 {
public static void main(String[] args) { //main()方法开始执行
Runner1 r = new Runner1(); // new一个线程类实例;
Thread t = new Thread(r); //启动一个线程要new一个Thread;
// main线程执行到这产生了另外一个分支,在这个分支上执行的是Runner1程序。
t.start(); //就绪了,可以执行了。但main线程可能已经执行。
//main()线程接着执行,有时间片就执行线程类实例Runner1
for(int i = 0; i < 100; i ++){
System.out.println("main Thread:-------" + i );
}
}
}
class Runner1 implements Runnable{
public void run(){
for(int i = 0; i < 100; i ++){
System.out.println("Runner1:" + i);
}
}
}
第二种:定义一个Thread的子类并重写RUN()方法。
例子:
public class TestThread1 {
public static void main(String[] args) { //main()方法开始执行
Runner1 r = new Runner1(); // new一个线程类实例;
t.start();
for(int i = 0; i < 100; i ++){
System.out.println("main Thread:-------" + i );
}
}
}
class Runner1 extends Thread{
public void run(){
for(int i = 0; i < 100; i ++){
System.out.println("Runner1:" + i);
}
}
}
推荐第一种方法:使用接口。因为接口可以多实现,而继承只能单继承。
执行结果和第一种方法一样: