多线程
在我们的OS里,
进程是资源分配的最小单位
线程是cpu调度的最小单位
并发:分为宏观(多任务)和微观(单任务)。
并行:并发执行。
进程:也称任务,是由操作系统来实现的(如果想通过进程让计算机同时完成多项任务,则每个任务都要开发一个相应的程序来实现的)。
线程:是指同一个程序(线程)内部每个单独执行的流程。
3、利用Timer TimerTask
创建:创建TimerTask的子类,并实现run()方法得到时钟器任务类
MyTimerTask extends TimerTask{
public void run(){
}
}
启动:创建时钟器Timer对象
利用时钟器对象的schedule()方法启动线程任务
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), ....,...);
在实现线程时,Java语言提供了3种实现方式:
1. 继承Thread类。
2. 实现Runnable接口。
3. 使用timer和TimerTask组合。
如果一个类继承了Thread类,则该类就具备了多线程的能力,可以以多线程的方式执行。
实现Runnable接口
Java语言中提供的另外一种实现多线程应用程序的方式是多线程对象实现Java.lang.Runnable接口,并且在该类中重写Runnable接口的run方法。
在需要启动线程的地方,首先创建Runnable类的对象,然后再以该对象为基础创建Thread类的对象,最后调用Thread对象的start方法,即可启动线程。(这种方式是实现多线程的一种主要方式)
使用Timer和TimerTask组合:就是使用java.util包中的Timer和TimerTask类来实现。
在这种实现方式中,通过继承TimerTask类创建子类,使该子类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。
一个Timer可以启动任意多个TimerTask实现的线程,但是多个线程之间会存在阻塞。因此,如果多个线程之间需要完全独立运行,最好还是一个Timer启动一个TimerTask实现的线程。
Timer类中启动线程还包括两个scheduleAtFixedRate方法,其作用是实现重复启动线程时的精确延时。