多线程优势
(1)提高界面程序的相应速度。
(2)充分利用系统资源
多线程实现
在实现线程编程时,首先需要让一个类具备多线程的能力,继承Thread类或实现Runnable接口的类具备多线程的能力;然后创建线程对象;调用对应的启动线程方法即可实现多线程编程。
在一个程序中可以实现多个线程,多线程编程指在同一个程序中启动了两个或两个以上的线程。
在实际实现线程时,Java语言提供了两种实现方式:
继承Thread类
实现Runnable接口
继承Thread类实现多线程
java.lang包中提供了一个专门的线程类(Thread),在该类中封装了许多对线程进行调度和处理的方法。
class 类名 extends Thread {
public void run()
{
//线程体
}
}
实现Runnable接口
实现java.lang.Runnable接口并且在该类中重写Runnable接口的run方法。
好处:在于多线程应用对象可以继承其它对象而不是必须继承Thread类,按照Java语言的语法,一个类可以实现任意多个接口,因此该种实现方式在实际实现时的通用性要比前面介绍的方式好一些。
使用实现Runnable接口的方式实现多线程的示例。
1.实现java.lang.Runnable接口;
2.重写Runnable接口的run方法;
3.创建Runnable接口的子类对象;
4.创建Thread类的对象,并将Runnable接口的子类对象作为参数传递给Thread类的构造方法,最后调用Thread对象的start方法即可启动线程。
Runnable1 r1 = new Runnable1();
Thread t1 = new Thread(r1);
t1.start();
新建(new Thread)
当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
例如:Thread t1=new Thread();
就绪(runnable)
当调用start()方法时,该线程进入就绪状态,线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。
例如:t1.start();
运行(running)
线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
正在睡眠
用sleep(longt) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。
正在等待
调用wait()方法。(调用motify()方法回到就绪状态)
被另一个线程所阻塞
调用suspend()方法。(调用resume()方法恢复)
终止状态(dead)
当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。
自然终止:正常运行run()方法后终止
异常终止:调用stop()方法让一个线程终止运行
可以用线程对象的isAlive()方法测试该线程是否已启动。