这篇文章是我写的第一篇文章,也算是个开篇吧.技术还不成熟一定会有考虑不周的,还请各位指教,(不要吝啬哦)以共同学习,共同进步.
首先,我会介绍一些有关于线程的基础,高手就可以略过这里了.
什么是多线程?
对于这个问题,我也没有很好的掌握,只是从概念上有这么一个影子.有的书籍中提到过,把线程叫作“轻量级的进程”。所以你可以把线程当作进程来看.当然,它们有很大的区别.
进程,我的理解它就是对在执行时的程序的一个包装.多进程,我们大多数人正在使用的Window操作系统就是多进程的.简单来讲,就是同一时刻可以执行多个程序.就像,你可以边上网边在线的听音乐,浏览器和在线的音乐播放器是分别的两个程序,它们可以同时执行.我们的CPU真的会同时执行它们吗?不,当然不可能了,我们大多数人家中的电脑只有一个CPU,那么它是怎么来完成这项多进程的工作的呢?它会分时的执行我们的程序,这种技术会把CPU的连续性的工作时间给分成等量的时间小片段,在一个时间片段内执行一个程序,另一个时间片内执行另一个程序,长此以往.那为什么我们会感觉不到这种断断续续的执行呢?因为,CPU对进程之间的转换很快.犹如闪电即逝.这就是多进程的技术,当然它的实现可不像我说得如此轻松.
回在线程上,线程的转换又要比进程更快.而且,线程之间的通信更方便.你也许会问会是进程之间的通信?就是以一种方式使两个线程之间有联系.让它们能够协作起来.不要着急我们介绍线程是怎么样有联系的.
怎么样建立线程?
如果你用Java,那么你有两种方法建立它.
第一种方法 继承自Thread类,并且用你的代码来覆盖这个类中的run方法.在这个run方法中写什么呢?写入你想要这个线程做的工作.之后在你要建立这个线程的地方创建一个这个类的实例对象并且调用它的实例方法start.以下是个例子.
class ThreadTest extends Thread{
public static void main(String[] args){
new ThreadTest().start();
}
public void run(){
//你要这个线程做什么
}
}
以上的例子在执行中一共有两个线程,(其实还有其它的线程)第一个线程是JVM执行这个程序的时候为main创建的线程,也叫作主线程.然后,执行到new ThreadTest().start()的时候会又建立了一个线程,也就是你想要的线程.
第二种方法 实现Runnable接口,同样也要覆盖这个接口中的run方法,当然这个时候就要叫实现了.在这个方法中也是写入你想要这个线程为你做的事,与上面的方法不同之处在于,你在创建了一个实现了Runnable接口的类的实例后没有start方法供你调用.你应该创建一个Thread类的实例,Thread类中有一个构造函数是Thread(Runnable target),它需要一个参数,这就是你那个实现了Runnable接口的类的实例.下面是例子.
class RunnableTest implements Runnable{
public RunnableTest(){
new Thread(this).start();
}
public static void main(String[] args){
new RunnableTest();
}
public void run(){
//你想要这个线程为你做什么
}
}
你可以看到,以上的例子比起第一种方法好像有点复杂.那第二种方法有什么可取之处呢.我们应该知道,Java语言是单继承的,也就是只能从一个父类那继承(不像C++).而对于Java来说,一个类却可以实现多个接口,这就是重点了.
(未完待续)