多线程的概念 在系统任务中,每个独立执行的程序称之为进程.我们现在的操作系统一般都是多任务的,既可以同时
可以执行多个应用程序.但是同时执行多个程序其实只是表面的现象,计算机的操作系统是负责对CP
U等设备资源进行分配和管理,这些设备在某一时刻只能做一件事情,但是它可以在很多的时间内交替执行
其他的应用程序,所以给人造成同时执行多个程序的假象.比如:从c盘中复制文件到d盘里,同时把e盘的文件
复制到f盘中和 先待c盘的文件复制到d盘后,再把e盘的文件复制到f 盘 哪个所需要的时间短呢? 答案是后
者.为什么呢?因为只有一个cpu如果同时进行两个不同的进程那么必须得考虑进程间的切换这个时间开销. 一个进程中又可以包含一个或者多个线程,一个线程就是一个程序内部的一条执行线索.单线程中,程序代
码必须依照顺序执行,在这种情况下呢,如果主函数要调用子函数,则主函数必须等待子函数的回应后才能
往下执行,不能两段代码同时交替执行.如果要一程序实现多段代码同时交替运行的话,就需要产生多个线
程,并且要指定每个线程上的代码,这就是多线程. 多线程的创建 1.继承Thread类 2.实现Runnable接口
继承Thread类的一个例子
public class ThreadDemo{ public static void main(String[] args){ new TestThread().start();//调用TestThread 类的start函数(从Thread中继承来的) while(true){ System.out.println("main thread is running"); } } } class TestThread extends Thread{//让它继承Thread类 public void run(){ while (true){ System.out.println(Thread.currentThread().getName() + " is running"); } } }
上面的程序我们可以看到我们并没有直接调用Thread子类TestThread的run方法,而是通过TestThred中
的从thread类中继承来的start方法,start方法可以产生一个新的线程,并在该线程上运行该thread子类的
run方法.
实现Runnable接口的一个例子 public class ThreadDemo{ public static void main(String[] args){ TestThread tt = new TestThread();//创建testThread 类 的一个实例 Thread t = new Thread(tt); t.start(); while(true){ System.out.println("main thread is running"); } } } class TestThread implement s Runnable{ public void run(){//线程的代码段,当执行start()时,线程从此开始执行 while (true){ System.out.println(Thread.currentThread().getName() + " is running"); } } 注意:一个线程的对象只能启动一个线程.如果我们模拟一个铁路售票系统 ,实现通过四个售票点来发某次
列车的100张车票,一个售票点用一个线程来表示.如果用继承Thread子类来实现多线程的话代码如下: public class ThreadDemo{ public static void main(String[] args){ new ThreadTest().start(); new ThreadTest().start(); new ThreadTest().start(); new ThreadTest().start(); } } class ThreadTest extends Thread{ private int tickets = 100; public void run(){ while(true){ if(tickets>0) System.out.println(Thread.currentThread().getName() + " is saling
ticket "+tickets--); } } } 产生四个线程,从结果我们看到啊,每张票被打印了四次.那么总计就有了400张车票,但是我们定义的时候
就只有一百张车票啊,所以从结果我们可以看出,这四条线程相互独立,每个线程都各自处理自己的资源.如
果用Runnable接口来实现多线程的话,代码如下: public class ThreadTest{ public static void main(String[] args){ ThreadTest t = new ThreadTest(); new Thread(t).start(); new Thread(t).start(); new Thread(t).start(); new Thread(t).start(); } } class ThreadTest implements Runnable{ private int tickets =100; public void run(){ while (true){ if(tickets>0) System.out.println(Thread.currentThread().getName()+" is saling ticket
"+tickets--); } } } 产生四条线程,这四条线程共同处理这100张车票这一资源.
|