`
arual
  • 浏览: 10813 次
社区版块
存档分类
最新评论

java 线程同步之condition

阅读更多

虽然condition的await() 与 signal() 方法与object的wait() notify() 方法功能类似,都实现线程间的通信。但condition还能实现wait notify实现不了的功能。

下面的例子是api上的一个例子,实现了一个阻塞队列

class BoundedBuffer {
   final Lock lock = new ReentrantLock();
   final Condition notFull  = lock.newCondition(); 
   final Condition notEmpty = lock.newCondition(); 

   final Object[] items = new Object[100];
   int putptr, takeptr, count;

   public void put(Object x) throws InterruptedException {
     lock.lock();
     try {
       while (count == items.length)
         notFull.await();
       items[putptr] = x;
       if (++putptr == items.length) putptr = 0;
       ++count;
       notEmpty.signal();
     } finally {
       lock.unlock();
     }
   }

   public Object take() throws InterruptedException {
     lock.lock();
     try {
       while (count == 0)
         notEmpty.await();
       Object x = items[takeptr];
       if (++takeptr == items.length) takeptr = 0;
       --count;
       notFull.signal();
       return x;
     } finally {
       lock.unlock();
     }
   }
 }

 

分享到:
评论

相关推荐

    操作系统实验 多线程同步与互斥 java编写 有界面

    操作系统实验是计算机科学教育中的重要组成部分,它...总之,理解和掌握多线程同步与互斥的概念是成为一名合格的Java开发者的关键技能之一。通过实际的编程实验,可以加深对这些概念的理解,并锻炼解决并发问题的能力。

    Java线程同步例子.pdf

    在Java中,线程同步是保证多线程安全...上述Java线程同步例子中涉及到的代码虽然是片段,但涵盖了线程同步处理的多个重要方面,帮助我们理解和使用Java线程同步机制,以及在设计和实现多线程应用程序时的实践和技巧。

    JAVA实现线程间同步与互斥生产者消费者问题

    在Java编程中,线程同步和互斥是多线程编程中的重要概念,它们用于解决多个线程同时访问共享资源时可能出现的问题。本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费...

    java多线程同步问题

    多线程注意:wait()方法的调用要有判定条件常用 while (<condition does not hold>) obj.wait(timeout, nanos); ... // Perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的...

    基于Java多线程同步技术的简易模拟售票系统实现.pdf

    多线程同步技术的主要目的是解决线程间共享数据时可能出现的竞态条件(race condition),从而避免数据不一致的问题。在Java中,多线程同步可以通过synchronized关键字实现,该关键字可以用来修饰方法或代码块,确保...

    Java线程Java线程Java线程Java线程

    4. **线程同步** - **synchronized**:用于方法或代码块,保证同一时刻只有一个线程执行。 - **volatile**:确保共享变量的可见性和有序性,避免指令重排序。 - **Lock**:提供比synchronized更强大的锁机制,如...

    多线程的批量线程同步解决方案

    "多线程的批量线程同步解决方案"这个标题暗示我们探讨的是如何在多线程环境下有效地管理和同步多个任务,确保数据一致性与程序正确性。下面将详细阐述相关知识点。 一、多线程基础 多线程是指在一个进程中同时执行...

    Java多线程之ReentrantLock与Condition - 平凡希 - 博客园1

    Java中的`ReentrantLock`是Java并发包`java.util.concurrent.locks`中的一个高级锁机制,它是可重入的互斥锁,具有与`synchronized`关键字相似的同步性,但提供了更多的灵活性和控制功能。本篇文章将深入探讨`...

    java课程设计线程同步五子棋.zip

    在Java编程语言中,线程同步是一个关键概念,特别是在多线程编程中,它用于确保多个线程在访问共享资源时能正确协调,避免数据不一致性和竞态条件。五子棋游戏是一个典型的多线程应用场景,因为它涉及到两个玩家交替...

    Java 多线程 PPT

    在多线程环境中,为了防止多个线程同时访问共享资源导致数据不一致,需要进行线程同步。Java提供了多种同步机制,包括synchronized关键字、Lock接口、Semaphore信号量等。synchronized可以修饰方法或代码块,确保...

    Java多线程示例之线程控制

    总之,Java多线程技术是软件开发中的重要技能,它涉及到线程池的使用、线程同步和通信等多个方面。通过学习和理解`MaxThreadCountTest`中的例子,开发者可以更好地掌握如何在实际项目中控制线程数量,优化程序性能,...

    java+多线程+同步详解源码整理

    3. **线程同步** 在多线程环境中,数据共享可能导致数据不一致,为了解决这个问题,Java提供了多种同步机制。包括: - **synchronized关键字**:用于方法或代码块,确保同一时间只有一个线程访问特定资源。 - **...

    Java 线程通信示例 源代码

    这个"Java线程通信示例源代码"很可能包含了演示如何在不同线程之间共享数据和协调执行顺序的实例。线程通信主要涉及两个核心概念:同步和互斥。 1. **线程同步**:线程同步是为了防止多个线程同时访问共享资源,...

    Jni多线程同步事例

    在JNI中,我们可以使用C/C++的原生线程同步工具,如互斥量(mutex)、条件变量(condition variable)、信号量(semaphore)等。例如,可以使用pthread_mutex_lock和pthread_mutex_unlock来实现互斥锁,确保同一...

    多线程同步解决卖票问题

    多线程同步解决卖票问题

    线程同步解决火车站售票问题

    在Java或C#等编程语言中,我们可以使用锁(Lock)、信号量(Semaphore)、条件变量(Condition)等工具来实现线程同步。 1. **互斥锁**:互斥锁是最基本的同步原语,它保证同一时间只有一个线程可以访问被锁定的...

    java 同步阻塞并唤醒指定线程

    总的来说,理解并熟练掌握Java中的多线程同步和阻塞机制对于编写高效且线程安全的代码至关重要。通过合理使用`synchronized`、`wait()`, `notify()`和`notifyAll()`,以及高级并发工具,开发者可以构建出复杂且可靠...

    Java 线程的学习和使用

    总的来说,理解和掌握Java线程的创建、运行、同步以及线程安全,是成为一名合格的Java开发者必不可少的技能。通过学习和实践,开发者可以编写出更加高效、健壮的多线程应用程序,以应对复杂的并发编程挑战。

    JNI 多线程同步机制的源码实现

    在C/C++中,我们可以利用互斥量(Mutex)、条件变量(Condition Variable)、信号量(Semaphore)或者临界区(Critical Section)等来实现线程同步。其中,互斥量是最常见的一种方式,可以保证同一时间只有一个线程...

Global site tag (gtag.js) - Google Analytics