一. 介绍
每个java程序都至少有一个 – 主线程.当一个java程序启动时,JVM会创建主线程,并在该线程中调用程序的main ()方法。线程可以理解为“程序内部一个独立的运行的单位”;以前我们写的程序也是一个线程,不过只是单线程,只能同时干一件事,所以当我们要处理很多数据时,程序的运行时间让人头大,特别是那个文件搜索,如果一个一个系统盘的找,那实在是慢的可以,单线程程序的运行是线性的,只能一步接一步处理数据,对于这样的需要处理大量数据的程序,多线程无疑是绝佳的选择。稍微解释一下,多线程就是在一个应用程序运行时,会有多个线程在执行,可以完成的是同一件事,也可以是多件事,就好像我们在玩电脑、聊QQ时,既可以聊天,也可以踩空间等等,如果是单线程,估计没事会玩QQ了。
二. 线程与进程
1. 每一个应用程序就是一个进程,而一个进程可以包含多个线程
2. 两个进程之间的内部数据和状态是完全独立的,而同一个进程中的多个线程是共享一块内存空间和一组系统资源的,在程序的内部可以相互调用;而大部分的进程之间必须通过网络实现
3. 线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程之间的切换比进程之间的切换的负担要小。
三. Java中的多线程实现
在java中,对于线程有专门的类,每一个线程对象都需继承java.util.Thread或者实现java.util.Runable,其中Thread是实现了Runable的类,而且要重写父类中的run()方法,要启动线程需调用线程中的start()方法启动,切记不可直接调用run()方法,那样就和一般的单线程方法调用没什么区别了
创建线程对象的方法如下:
1. public Test1 extends Thread{ run(){…} }//继承Thread类,并重写run()方法
Test1 t1 = new Test1(); t1.start();
2. public Test2 implements Runable{ run(){…}}//实现Runable接口, 并重写run()方法
Test2 t2 = new Test2(); Thread thread = new Thread(t2); t1.start();
以上两种方法都可以,但考虑到java 的单继承机制,如果需要继承其他的类,则最好实现Runable接口。