一.JavaThread类的几个函数的说明:
1. setPriority( ): 设置线程的优先权;
2 . yield( ): 暂停线程的执行,给其它具有相同优先权的线程执行的机会,若此时没有其它线程执行,则此线程继续执行。这个函数并不会释放锁住的对象。
3. join( ): 等待加入的线程执行完毕才会执行下一个线程。加入的线程通过interrupt( )来唤醒。
4. wait( ): 类似sleep( ), 不同的是,wait( )会先释放锁住的对象,然后再执行等待的动作。注意,这个函数属于Object类。另外,由于wait( )所等待的对象必须先锁住,因此,它只能用在同步化程序段或者同步化方法内,否则,会抛出异常IllegalMonitorStateException.
二. 例子:
下面,仅对于wait( ) 和notify( )函数进行测试。
这个例子向读者展示了生产者--消费者关系。
代码:
importJava.util.Vector;
public class ThreadWaitNotifyTest {
public static void main(String args[]) {
Vector obj = new Vector();
Thread consumer = new Thread(new Consumer(obj));
Thread producter = new Thread(new Producter(obj));
consumer.start();
producter.start();
}
}
/*消费者 */
class Consumer implements Runnable {
private Vector obj;
public Consumer(Vector v) {
this.obj = v;
}
public void run() {
synchronized(obj) {
while (true) {
try {
if (obj.size() ==0){
obj.wait();//本线程(消费者)放弃对象锁并等待
}
System.out.println("Consumer:goods have been taken");
System.out.println("obj size: " + obj.size());
obj.clear();
obj.notify();//本线程重新就绪
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
}
/* 生产者 */
class Producter implements Runnable {
private Vector obj;
public Producter(Vector v) {
this.obj = v;
}
public void run() {
synchronized(obj) {
while (true) {
try {
if (obj.size() !=0){
obj.wait();//本线程(生产者)放弃对象锁并等待
}
obj.add(new String("apples"));//生产一个苹果
obj.notify();//本线程重新就绪
System.out.println("Producter:obj are ready");
Thread.sleep(500);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
}