JAVA随笔——多线程的简介与实现

来源:互联网 发布:成套报价软件 编辑:程序博客网 时间:2024/04/30 00:36
 

       又是新的一周,今天讲的是第十三章多线程,在OS里,进程是资源分配的最小单位,线程是cpu调度的最小单位,每个独立运行的程序称为一个进程(Process)。在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程。

多线程的优势:

1、提高界面程序的响应速度,可以将需要大量时间完成的流程在后台完成。

2、充分利用系统资源。

  在实现线程编程时,首先需要让一个类具备多线程的能力(继承Thread类或实现Runnable接口的类具备多线程的能力),然后创建线程对象,调用对应的启动线程方法,既可实现多线程编程。

在实际实现线程时,JAVA提供了3种实现方式:1、继承Thread类;2、实现Runnable接口;3、使用了TimerTimerTask组合。

1、继承Thread

   创建:  A extends Thread

   在A中实现run()

   启动:利用继承自Thread strart() 方法

          A a = new A();

  a.start();

    一个类具备了多线程的能力以后,可以在程序中需要的位置启动线程,而不仅仅是在main方法内部启动。

2、实现Runnable接口

   创建:  A implements Runnable

   在A中实现run()

   启动: 以A的对象为Thread的构造函数的参数创建Thread对象

   并且利用它的start()方法调度启动线程

          A a = new A();

  Thread b = new Thread(a);

  b.start();

3、利用Timer和 TimerTask组合

    创建:创建TimerTask的子类,并实现run()方法得到时钟器任务类

          MyTimerTask extends TimerTask{

public void run(){

}

  }

    启动:创建时钟器Timer对象

          利用时钟器对象的schedule()方法启动线程任务

  Timer timer = new Timer();

  timer.schedule(new MyTimerTask(), ....,...);

在实际使用时,一个Timer可以启动任意多个TimerTask实现的线程,但是多个线程之间会存在阻塞。因此,如果多个线程之间需要完全独立运行,最好还是一个Timer启动一个TimerTask实现的线程。

Timer类中4个互为重载的schedule方法:

1、public void schedule(TimerTask task,Date time):该方法的作用是在到达time指定的时间或已经超过该时间时执行线程task

  Date d=new Date(2009-1900,10-1,1,10,0,0);

  t.schedule(task,d); //在时间达到d或超过d(如2009102号)时,启动线程task

2、Public void schedule(TimerTask task,Date firstTime,long period):该方法的作用是在时间到达firstTime时开始,每隔period毫秒就启动一次task指定的线程。这种方法会重复启动线程。

  Date d=new Date(2009-1900,10-1,1,10,0,0);

  t.schedule(task,d,20000); //当时间达到或超过d后每隔20000毫秒启动一次线程task

3、Public void schedule(TimerTask task,long delay):该方法和第一个方法类似,作用是在执行schedule方法delay毫秒后启动线程task

    T.schedule(tadk,1000);    //在执行该行启动代码1000毫秒后启动一次线程task

4、Public void schedule(TimerTask task,long delay,long period):该方法和第二个方法类似。

原创粉丝点击