`
milagro
  • 浏览: 13902 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

线程同步的方法

阅读更多

wait():作用是使得当前调用wait方法所在部分(代码块)的线程停止执行,并释放当前获得的调用wait所在的代码块的锁,并在其他线程调用notify或者notifyAll方法时恢复到竞争锁状态(一旦获得锁就恢复执行)。

调用wait方法需要注意几点:

        第一点:wait被调用的时候必须在拥有锁(即synchronized修饰的)的代码块中。

        第二点:恢复执行后,从wait的下一条语句开始执行,因而wait方法总是应当在while循环中调用,以免出现恢复a执行后继续执行的条件不满足却继续执行的情况。

        第三点:若wait方法参数中带时间,则除了notifynotifyAll被调用能激活处于wait状态(等待状态)的线程进入锁竞争外,在其他线程中interrupt它或者参数时间到了之后,该线程也将被激活到竞争状态。

        第四点:wait方法被调用的线程必须获得之前执行到wait时释放掉的锁重新获得才能够恢复执行。

 

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

 

notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

 

synchronized关键字

        第一点:synchronized用来标识一个普通方法时,表示一个线程要执行该方法,必须取得该方法所在的对象的锁。

        第二点:synchronized用来标识一个静态方法时,表示一个线程要执行该方法,必须获得该方法所在的类的类锁。

        第三点:synchronized修饰一个代码块。类似这样:synchronized(obj) { //code.... }。表示一个线程要执行该代码块,必须获得obj的锁。这样做的目的是减小锁的粒度,保证当不同块所需的锁不冲突时不用对整个对象加锁。利用零长度的byte数组对象做obj非常经济。

分享到:
评论

相关推荐

    使用三种VC的多线程同步方法编写一个多线程的程序

    1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。

    用多线程同步方法解决生产者-消费者问题

    本项目要求用多线程同步方法解决生产者-消费者问题,其中存在多个生产者和消费者线程。缓冲池有n个缓冲区,生产者将产品放入缓冲区,消费者从中取走产品。为了防止消费者访问空缓冲区或生产者向已满的缓冲区添加...

    java 多线程同步方法的实例

    本文将深入探讨Java中的多线程同步方法,并通过实例来阐述其工作原理。 首先,我们要理解线程同步的基本概念。在多线程环境中,当多个线程试图访问同一资源时,如果没有适当的同步控制,可能会导致不可预测的结果。...

    线程同步的五种方法

    在实际编程中,根据应用场景选择合适的线程同步方法至关重要。例如,如果只需要保护一个资源的访问,临界区可能是最佳选择;如果需要控制同时访问资源的线程数量,可以使用信号量或事件;对于跨进程的同步,互斥量是...

    NET多线程同步方法详解

    .NET中的多线程同步是确保在并发环境下多个线程安全访问共享资源的关键技术。本文将深入探讨.NET框架中实现线程...在设计多线程应用时,应根据资源的竞争情况、线程间的交互需求以及性能考虑,选择最合适的同步方法。

    WinCE线程同步方法

    本文将详细探讨WinCE中的线程同步方法,包括临界区、事件对象以及它们的应用。 首先,我们来看临界区(Critical Section)。临界区是一种简单的线程同步机制,它提供了一种方式,使得同一时间只有一个线程可以访问...

    用多线程同步方法解决读者阅览问题

    "多线程同步方法解决读者阅览问题" 这是一个使用多线程同步方法解决读者阅览问题的示例程序。该程序使用 C 语言编写,使用 POSIX 线程库(pthread)和信号量(semaphore)来实现多线程同步。 知识点1:多线程编程 ...

    java中线程同步方法

    ### Java中的线程同步方法详解 #### 引言 在多线程编程中,线程同步是一项关键的技术,用于确保当多个线程访问共享资源时,不会发生数据混乱或竞态条件。Java提供了多种机制来实现线程同步,包括synchronized...

    用多线程同步方法解决读者写者问

    用多线程同步方法解决读者写者问题(Reader-Writer Problem) ,设有20个连续的存储单元,写入/读出的数据项设定为1~20这20个字符。 要求; (1) 每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当前...

    线程同步方法--Metux 实例

    总之,“线程同步方法--Metux实例”通过C++的`std::mutex`展示了如何在Metux库中实现线程安全的资源共享,这对于理解和应用多线程编程,特别是在网络编程中,具有很高的实践价值。通过深入学习和实践这个实例,...

    用多线程同步方法解决生产者-消费者问题(操作系统课设

    多线程同步方法解决生产者-消费者问题 多线程同步方法是解决生产者-消费者问题的常用方法。生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区...

    线程同步方法

    ### 线程同步方法详解 #### 一、线程同步的重要性及背景 在多线程编程中,线程同步是解决并发问题的关键技术之一。当多个线程访问共享资源时,如果没有适当的同步机制,可能会导致数据不一致、竞态条件等问题。...

    用多线程同步方法解决生产者-消费者问题操作系统课设.doc

    **多线程同步方法:** 解决生产者-消费者问题通常使用以下同步原语: 1. **信号量(Semaphore)**:用于控制对共享资源的访问。信号量分为互斥信号量(互斥量)和计数信号量。互斥量用于确保同一时间只有一个线程...

    用多线程同步方法解决哲学家就餐问题

    linux用多线程同步方法解决哲学家就餐问题(Dining-Philosophers Problem)-linux using multi-thread synchronization methods to solve the problem dining philosophers (Dining-Philosophers Problem)

    linux用多线程同步方法解决睡眠理发师问题(Sleeping-Barber_Problem).pdf

    linux用多线程同步方法解决睡眠理发师问题(Sleeping-Barber_Problem).pdf

    线程同步方法,和线程创建方法

    线程隶属于进程,线程是属于进程内部的程序流,目前主流的操作系统都支持多进程,而 每一个进程的内部又可以支持多线程; 进程是重量级的,每个进程都需要独立的内存空间等,因此新建进程对系统资源的消耗比 较大; ...

Global site tag (gtag.js) - Google Analytics