多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流。进程是静态的概念,线程是动态的概念。
每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,线程可以看成时轻量级的进程,同一类线程贡献代码和数据空间,每个线程具有独立的运行栈和程序计数器,线程切换的开销小。
单线程
同时有且仅有一个程序在执行
单线程实例1:
public class {
public static void main(String[] args) {
m1();
}
public static void m1() {
m2();
m3();
}
public static void m2() {}
public static void m3() {}
}
程序执行图:

< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGJyPgo8L3A+CjxwPjxicj4KPC9wPgo8cD7Wu9PQ0rvM9cK3vrbAtNa00NCjrNa00NBtMda00NBtMiy1yG0y1rTQ0M3q1NnAtNa00NBtM9fuuvO72LW9wcvWtNDQbTHJz6GjPC9wPgo8cD48YnI+CjwvcD4KPHA+PGJyPgo8L3A+CjxoMj624M/fs8w8L2gyPgo8cD4gICAgICAgICAgysfU2rLZ1/fPtc2z1tDNrMqx1MvQ0LbguPazzNDyo6zU2s2s0ru49tOm08OzzNDy1tDT0LbguPbLs9DywffNrMqx1rTQ0KOswb3W1re9t6jAtMq1z9a24M/fs8yjujwvcD4KPGgzPrXa0rvW1srHyrXP1lJ1bm5hYmxlvdO/2qOsyLu688q1z9bG5HJ1bre9t6g8L2gzPgo8cD48YnI+CjwvcD4KPHA+z8LD5srHzai5/cq1z9ZSdW5uYWJsZb3Tv9rKtc/WtuDP37PMo7o8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">public class TestThread1 { public static void main(String args[]) { Runner1 r = new Runner1(); r.start(); //r.run(); //Thread t = new Thread(r); //t.start(); for(int i=0; i<100; i++) { System.out.println("Main Thread:------" + i); } } } //class Runner1 implements Runnable { class Runner1 extends Thread { public void run() { for(int i=0; i<100; i++) { System.out.println("Runner1 :" + i); } } }
产生的结果执行图:

第二种方式是new出Thread,然后重写start方法;
public class TestThread2 {
public static void main(String args[]) {
Runner2 r = new Runner2();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
}
}
class Runner2 implements Runnable {
public void run() {
for(int i=0; i<30; i++) {
System.out.println("No. " + i);
}
}
}
结果图:
系统资源、调度线程运行并执行线程的run方法。
2.在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。
3.java 是单根继承 实现多线程有两种实种方式一种是继承 thread 类 另一种就是实现Runnable接口 如果这个类还要继承其他的类的时候 这时候是不允许继承的。 此时就可以使用实现接口的方式,况且 Runnable接口中只有一个空的run()方法。
4:Thread实现了Runnable,需要使用Runnable的地方可以直接使用thread;单独使用Runnable时要先把run方法实现了
不能说使用那个更好,要看在什么地方使用最合适,要以实际情况而定!