`

线程同步通信技术-wait notify 用法

    博客分类:
  • java
 
阅读更多

 

/**
 *
 * <pre>
 * 子线程运行10次,主线程运行100次,子线程在运行10次,接着主线程在运行100次,依次循环50次

  * 线程之间的通信与同步应该在一个业务类中处理
 * </pre>
 *
 * @create 2014年10月22日 下午8:55:17
 * @modify
 * @since   JDK1.6
 */
import java.util.concurrent.atomic.AtomicInteger;

public class TraditionalThreadCommunication {

    /**
     * @param args
     */
    public static void main(String[] args) {
       
        final Business business = new Business();
        new Thread(
                new Runnable() {
                   
                    @Override
                    public void run() {
                   
                        for(int i=1;i<=50;i++){
                            System.out.println("sub run i"+i);
                            business.sub(i);
                        }
                       
                    }
                }
        ).start();
       
        for(int i=1;i<=50;i++){
            System.out.println("i--------"+i);
            business.main(i);
        }
       
    }

}
  class Business {
      private boolean bShouldSub = true;
      public synchronized void sub(int i){
          while(!bShouldSub){
              try {
                this.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          }
            for(int j=1;j<=10;j++){
                System.out.println("sub thread sequence of " + j + ",loop of " + i);
            }
          bShouldSub = false;
          this.notify();
      }
     
      public synchronized void main(int i){
              while(bShouldSub){
                  try {
                    this.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
              }
            for(int j=1;j<=100;j++){
                System.out.println("main thread sequence of " + j + ",loop of " + i);
            }
            bShouldSub = true;
            this.notify();
      }
  }
摘自 04_传智播客_张孝祥_传统线程同步通信技术

分享到:
评论

相关推荐

    java之wait,notify的用法([ 详解+实例 ])

    在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object类的一个方法,用于让当前线程...

    java-wait和notify的用法.pdf

    在Java编程语言中,`wait()`和`notify()`是Object类中的两个关键方法,它们用于线程间的协作和通信。这两个方法在多线程环境下尤其重要,因为它们允许线程等待特定条件并通知其他线程继续执行。在分析给定的程序之前...

    Java线程间的通信----生产者消费者模型

    - `wait()`和`notify()`/`notifyAll()`:这两个方法位于`Object`类中,用于线程间的通信。生产者线程在生产完产品后调用`notify()`或`notifyAll()`唤醒消费者线程,消费者线程在消费完产品后调用`wait()`进入等待...

    学习多线程之一:线程通信--利用事件对象.zip_线程通信

    本教程将聚焦于利用事件对象进行线程间的通信,这是实现多线程同步的一种常见方法。 事件对象,通常称为信号量或事件标志,在Windows API中,它是一个内建的同步机制,允许线程等待特定事件的发生,或者通过设置...

    Java 同步方式 wait和notify/notifyall

    在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...

    Java多线程wait和notify

    在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...

    同步线程的应用---java

    3. **wait()、notify() 和 notifyAll()** 方法:这些方法是Object类中的,用于线程间通信。一个线程调用`wait()`会释放同步锁并进入等待状态,直到其他线程调用`notify()`或`notifyAll()`唤醒它。 4. **java.util....

    多线程同步和通讯完整示例

    synchronized关键字提供了基本的线程同步,而wait-notify机制和Lock接口则提供了更高级的线程通讯和控制手段。在实际开发中,根据具体需求选择合适的同步策略,可以提高程序的效率和正确性。通过学习和实践...

    Java 同步锁 wait notify 学习心得

    使用`wait()`的一个关键前提是在`synchronized`代码块中调用,以确保在释放锁的同时保持线程同步。 #### `notify()` `notify()`方法随机唤醒正在等待该对象锁的线程之一。被唤醒的线程将有机会重新获取锁并继续...

    浅谈Java线程间通信之wait/notify

    Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式。 wait()方法将当前线程置于等待状态,直到其他线程调用notify()或...

    多线程精品资源--这是RedSpider社区成员原创与维护的Java多线程系列文章。.zip

    - **wait()、notify()和notifyAll()**:这些方法用于线程间的通信,控制线程的执行顺序,确保资源的正确访问。 - **BlockingQueue**:作为一种高级的线程间通信工具,它可以实现生产者消费者模型,简化并发编程。 ...

    同步块线程的调用--java

    4. **wait()、notify()和notifyAll()**:这些是Object类的方法,可以在同步块中使用,用于线程间的通信。`wait()`会让当前线程等待,`notify()`或`notifyAll()`会唤醒等待的线程。 5. **volatile关键字**:虽然不是...

    浅谈java多线程wait,notify

    在Java多线程编程中,wait和notify是两个非常重要的机制,用于实现线程之间的通信和同步。在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在...

    wait_notify_demo

    `wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...

    L17-线程间通信-讲义.pdf

    - **对象等待与通知**:`Object.wait()`, `Object.notify()`, `Object.notifyAll()`用于线程间的同步和通信。`wait()`会让当前线程等待,直到其他线程调用`notify()`或`notifyAll()`。这些方法需在同步代码块中使用...

    Java多线程编程实战指南-核心篇

    Java提供了多种同步工具,如synchronized关键字、wait()和notify()方法、Lock接口(包括ReentrantLock可重入锁)以及Semaphore信号量等。这些工具能够确保共享资源在多线程访问时的安全性,防止数据竞争和死锁的发生...

    一个理解wait()与notify()的例子

    本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典...

    Java的多线程-线程间的通信.doc

    Java提供了多种机制来实现线程间的通信,包括使用wait(), notify()和notifyAll()方法,以及使用synchronized关键字控制并发访问共享资源。这些方法都定义在java.lang.Thread类中。 1. **wait(), notify()和...

    多线程sleep,yield,wait区别

    - 这些方法位于 `java.lang.Object` 类中,用于实现线程间的同步和通信。 - 当线程调用一个对象的 `wait()` 方法时,它会释放对象的锁,进入等待状态,直到其他线程调用同一对象的 `notify()` 或 `notifyAll()`。 ...

    多线程通信和等待机制.docx

    此外,wait()和notify()方法的使用还可以实现线程之间的通信和协作,例如,在银行系统中,多个线程可以使用wait()方法等待某个资源的释放,而notify()方法可以通知其他线程该资源已经释放。 多线程通信和等待机制是...

Global site tag (gtag.js) - Google Analytics