Runnable接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个名为run()的无参数方法。void run().
此外,Runnable为非Thread子类提供了一种激活方式。通过实例化某个Thread实例并将自身作为运行目标,就可以运行实现Runnable的类而无须创建Thread的子类。
4、定时器TimerTask
TimerTask是一种特殊的线程,用来为Timer安排一次执行或者重复执行的任务。他实现了Runable接口,是一个抽象类
public abstract class TimerTask extends Object implements Runnable
她本身没有实现run函数,因此需要子类来实现它。
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TestTimerTask extends TimerTask{ public void run(){ System.out.println(new Date()); } //每隔1秒,打印时间 public static void main(String[] args){ Timer timer = new Timer(); TestTimerTask task = new TestTimerTask(); timer.schedule(task,1000,1000); } }
定时器任务与线程不同,它是定时执行的线程,因此不能够直接使用start()来启动它,而需要使用一个特殊的类Timer来启动它。Timer是一个工具,用来安排在后台线程中执行的任务。可以安排任务执行一次,或者定期重复执行。
对Timer对象最后的引用完成后,并且所有未处理的任务都已经执行完毕后,计时器的任务执行线程会正常终止,并且成为垃圾回收的对象,但是这可能需要花费很长时间。所以想要快速终止计时器的任务执行线程,那么调用计时器的cancle方法即可。void cancle();
Timer运行定时器的方式有如下几种:
安排在指定的时间执行指定的任务 void schedule(TimerTask task,Date time)
安排指定的任务在指定的时间开始进行重复的固定延迟执行 void schedule(TimerTask task,Date firstTime,long period);
安排在指定延迟后执行指定的任务 void schedule(TimerTask task,long delay);
5、使用线程组。
线程是可以被组织的,Java中每个线程都是线程组的成员,线程组把多个线程集成为一个对象,通过线程组可以同时对其中的多个线程进行操作,如启动一个线程组的所有线程等。Java的线程组通过ThreadGroup类实现。
ThreadGroup类用来管理一组线程,包括线程的数目、线程之间的关系、线程正在执行的操作,以及线程将要启动或终止时间等。线程组还可以包含线程组。
使用线程组的好处是,可以对一组线程进行整体操作,可用的操作函数包括
resume();//恢复执行该线程组的所有处理
stop();//停止该线程组中的所有处理
suspend();//挂起该线程组的所有处理
destroy();//撤销该线程组和它的所有子线程
本文出自 “阿酷博客源” 博客,请务必保留此出处http://aku28907.blog.51cto.com/5668513/1773021
原文地址:http://aku28907.blog.51cto.com/5668513/1773021