`
milagro
  • 浏览: 13523 次
  • 性别: 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中的多线程同步方法,并通过实例来阐述其工作原理。 首先,我们要理解线程同步的基本概念。在多线程环境中,当多个线程试图访问同一资源时,如果没有适当的同步控制,可能会导致不可预测的结果。...

    WinCE线程同步方法

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

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

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

    java中线程同步方法

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

    线程同步的五种方法

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

    C#线程同步的几种方法

    因此,掌握有效的线程同步方法对于开发稳定可靠的多线程应用至关重要。 ### 1. volatile关键字 `volatile`关键字用于标记那些可能被不同线程访问和修改的变量,它强制所有读写操作直接从主内存进行,避免了缓存...

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

    用多线程同步方法解决读者写者问题(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