在Java中实现多线程有2中方法可以建立子线程,Thread类定义了多种方法可以被派生类储在
对于所有的方法,唯一需要被重载的是Run()方法。当然这个也是实现Runnnable 接口所需要的同样的方法。很多Java程序员认为类尽在他们被加载或者修改时应该被扩展,因此如果不重载Thread的其他方法,最好只是实现Runnable接口。
问题1、一个线程如何知道另一个线程已经结束?
在Java中有2种方法可以判断一个线程是否已经结束。第一个方法可以在线程组调用isAlive()方法,这个方法有Thread定义,它的通常形式为: final boolean isAlive()
如果所调用的线程仍然在运行,isAlive()方法返回true,如果不是则返回false;
但是isAlive方法很少调用,等待线程结束的更常用的方法是调用join(),描述如下:
final void join()throws InterruptedException
该方法等待所调用的线程结束,该名字来自于要求线程等待直到指定的线程参与的概念;
join方法的附加形式允许给等待的指定的线程结束定义一个最大的时间。
join方法将线程之间的并行改为串行
问题2:线程间的通信
为了避免轮询,java包含了通过wait(),notify(),notifyAll()方法的实现的一个进程间的通信的机制;这些方法在对象中是使用final方法实现的,所以所有的类都包含他们。这三个方法仅在synchronized方法中才能被调用。具体如下:
wait():告知被调用的线程放弃管程进入休眠知道其他的线程进入相同的管程并且调用notify();
notify():恢复相同对象中第一个调用wait()的线程
notifyAll():恢复相同对象中所有调用wait的线程。具有最高级的线程优先;
在java中Thread类中定义了suspend(),resume(),stop()3个方法对线程进行挂起,恢复,终止操作;