宋利兴__MySQL复习1

 

Java   第十三章

今天主要讲了关于线程同步通信以及定时器:Timer和TimerTask的有关方法,并例举了一些案例。
    为避免死锁,就应该让线程在进入阻塞状态时尽量释放其锁定的资源,以为其他的线程提供运行的机会,Object类中定义了几个有用的方法:wait()、notify()、notifyAll()。

1、wait():被锁定的对象可以调用wait()方法,这将导致当前线程被阻塞并释放该对象的互斥锁,即解除了wait()方法当前对象的锁定状态,其他的线程就有机会访问该对象。

2、notify():唤醒调用wait()方法后被阻塞的线程。每次运行该方法只能唤醒一个线程。

3、notifyAll():唤醒所有调用wait()方法被阻塞的线程。

定时器:Timer和TimerTask:

java.util包中的Timer和TimerTask类也可实现多线程

1、Timer类实现的是类似闹钟的功能,也就是定时或者每隔一定时间间隔触发一次线程。

2、TimerTask类是一个抽象类,该类实现了Runnable接口,具备多线程的能力。

通过继承TimerTask类创建子类,使该子类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。

实例,使用Timer和TimerTask组合实现的多线程。

class TimerTask1 extends TimerTask {      

      public void run() {

           try{

                 for(int i = 0;i < 5;i++){

                      Thread.sleep(1000);

                      System.out.println("Run" + i);

                 }

           }catch(Exception e){}

      }

}

public class TestTimer {

      public static void main(String[] args) {

           Timer t = new Timer();//定时器

           TimerTask1 tt1 = new TimerTask1();

           t.schedule(tt1, 0);//启动线程,tt1是需要启动的线程对象

           try{

                 for(int i = 0;i < 5;i++){

                      Thread.sleep(1000);

                      System.out.println("Main:" + i);

                 }

           }catch(Exception e){}

      }

}

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);

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);

4、public void schedule(TimerTask task,long delay)在执行schedule方法delay毫秒以后启动线程task。
t.schedule(task,1000);//在执行该行启动代码1000毫秒后启动一次线程task

5、public void schedule(TimerTask task,long delay,long period):在执行schedule方法delay毫秒以后启动线程task,然后每隔period毫秒重复启动线程task。

以上是今天所讲的内容概述。

posted @ 2011-09-15 14:37  Springside4  阅读(148)  评论(0编辑  收藏  举报