Java是支持多线程的语言,要想了解线程,我们得先知道进程。所谓进程,其实很好理解,进程就是程序的一次动态执行过程。多进程操作系统能同时运行多个进程,由于CPU具备分时机制,由于CPU执行速度分常快,使得程序好像是在“同时”执行一样,其实不是!
而多线程是实现并发机制的一种有效手段。所谓多线程其实是只一个进程在执行过程当中可以产生多个线程,这些线程可以同时存在、同时运行,一个进程可能包含了多个同时执行的线程。
在Java中要想实现多线程,我们可以通过继承Thread类。其定义格式为:
class 类名称 extends Thread{
属性...;
方法...;
public void run(){
//重写Thread类中的run()方法,此方法是线程的主体
线程主体;
}
}
现在我们来举个例子说明下:
class MyThread extends Thread{
private String name;
public MyThread(String name){
this.name=name;
}
public void run(){
for(int i=0;i<5;i++){
System.out.println(name+"运行,i="+i);
}
}
};
public class ThreadTest{
public static void main(String args[]){
MyThread mt1=new MyThread("线程A");
MyThread mt2=new MyThread("线程B");
mt1.run();
mt2.run();
}
}
运行结果:
线程A运行,i=0
线程A运行,i=1
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
这时我们会问,不是说多线程吗,怎么没有体现,即使我们用一般的方法,也能实现这个功能,所以要正确的启动线程,是不能直接调用run()方法的,应该调用从Thread类中继承来的start()方法,我们可以把上面的代码倒数两行变为:
mt1.start();
mt2.start();
这时运行结果为:
线程A运行,i=0
线程A运行,i=1
线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
这只是其中的一种结果,这时可以看出是多线程的。两个线程是交错运行的,哪个线程对象抢到了CPU资源,哪个线程就能运行,所以程序每次的运行结果也一样的。在线程启动时,虽调用的是start()方法,但实际上调用的是run()方法的主体。
<!--EndFragment-->