java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 Java 线程中的 notifyAll 唤醒操作, 非常不错,具有参考借鉴价值,需要的朋友可以参考下
注意:
java 中的 notifyAll 和 notify 都是唤醒线程的操作,notify 只会唤醒等待池中的某一个线程,但是不确定是哪一个线程,notifyAll 是针对指定对象里面的所有线程执行唤醒操作,指定对象一旦唤醒成功。则会立即加入线程的资源争夺中去。
例如:
- package TestThread.ThreadSynchronized;
- public class TestWaitAll {
- public static void main(String[] args) {
- Test1 test1 = new Test1();
- Thread t = new Thread(test1, "线程1");
- Thread t1 = new Thread(test1, "线程2");
- Thread t2 = new Thread(test1, "线程3");
- Test2 test2 = new Test2(test1, "唤醒线程");
- t.start();
- t1.start();
- t2.start();
- try {
- Thread.sleep(2000);
- } catch(InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- test2.start();
- }
- }
- class Test1 implements Runnable {
- public void run() {
- synchronized(this) {
- try {
- this.wait();
- } catch(InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println(Thread.currentThread().getName() + "当前没有被执行到!");
- }
- }
- }
- class Test2 extends Thread {
- private Test1 test1;
- String name;
- public Test2(Test1 test1, String name) {
- super(name);
- this.name = name;
- this.test1 = test1;
- }
- public void run() {
- synchronized(test1) {
- test1.notifyAll(); // 针对当前对象执行唤醒所有线程的操作
- System.out.println(Thread.currentThread().getName() + ":唤醒线程执行成功!");
- }
- }
- }
执行结果为:
以上所述是小编给大家介绍的 Java 线程中的 notifyAll 唤醒操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/1222/357869.html