在单CPU的系统中,系统调度在某一时刻只能让一个线程运行,整个程序便会遵循逻辑顺序逐步进行,这样一来,想要同时调用多个方法时不可避免地出现了竞争,“竞争力”强的方法还可以勉强正常运行,但弱的一方便处于饥饿状态,难以进行。更重要的一点是~一般我们在java中运行其它类中的方法时,无论是静态调用,还是动态调用,
都是在当前的进程中执行的,也就是说,只有一个java虚拟机实例在运行。那么,一旦有一个过程发生异常,其它的子进程也会相应受到影响。于是乎~多线程应运而生!
首先,定义一个继承自Thread的线程类,并在该类中重写run方法,当然,千万不要忘记,预想并行的每一个方法都要在run()方法之外做相应的定义哦!
//定义一个线程类
public class PrintThread extends Thread {
private int t=0;
public PrintThread(int t){
this.t = t;
}
//重写run方法
public void run(){
if (t==1){
a();
}
else if (t==2){
b();
}
else if(t==3){
c();
}
}
public void a(){
for(int i=0;i<1000;i++){
System.out.println("a在执行。。。");
try{
Thread.sleep(100);
}catch(Exception ef){}
}
}
public void b(){
for(int i=0;i<1000;i++){
System.out.println("b在执行。。。");
try{
Thread.sleep(100);
}catch(Exception ef){}
}
}
public void c(){
for(int i=0;i<1000;i++){
System.out.println("c在执行。。。");
try{
Thread.sleep(100);
}catch(Exception ef){}
}
}
}
接下来,我们便可以定义一个测试类,实例化线程类对象之后,进行方法调用啦!需要注意的是~线程的启动用的是start()方法,而不是对run()方法的直接调用。
另外两个需要注意的地方:
1.线程的实现要写在run()方法里面。
2.实行多线程的方法须在线程之外调用。
相比之下,多线程的运用占用了较多的系统资源,但由于新启动的进程是在不同的虚拟机中运行,会使程序更加稳定,因此应用也更为广泛。
接触了这一块的内容之后,我似乎看到了代码更为神奇的一面——与现实生活息息相关。For example~煮面。我们需要烧水、洗菜、准备其他各种食材等等,显然,我们可以先烧水,然后一边准备一边等水开,几项工作同时进行,而不是准备好后再去烧水,坐在那瞪着眼睛看水沸。
很神奇的一个现象~似乎很多发明都是由懒人创造的,因为他们讨厌麻烦而喜欢寻找捷径。当然~更重要的是可以节省时间,用更短的时间创造出更多的价值!
多线程——为计算机创造了一个可以“懒”起来的绝佳条件!~O(∩_∩)O~