`
feiniao2029
  • 浏览: 22284 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

控制线程顺序,使用semaphore信号量机制

阅读更多

有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…


package pcenshao.thread;

import java.util.concurrent.Semaphore;

public class SemaphoreABC {
   
    static class T extends Thread{
       
        Semaphore me;
        Semaphore next;
       
        public T(String name,Semaphore me,Semaphore next){
            super(name);
            this.me = me;
            this.next = next;
        }
       
        @Override
        public void run(){
            for(int i = 0 ; i < 10 ; i ++){
                try {
                    me.acquire();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(this.getName());
                next.release();
            }
        }
    }
   
    public static void main(String[] args) {
        Semaphore aSem = new Semaphore(1);
        Semaphore bSem = new Semaphore(0);
        Semaphore cSem = new Semaphore(0);
       
        T a = new T("A",aSem,bSem);
        T b = new T("B",bSem,cSem);
        T c = new T("C",cSem,aSem);
       
        a.start();
        b.start();
        c.start();
    }
}
分享到:
评论

相关推荐

    semaphore控制多线程循序执行

    在"semaphore控制多线程循序执行"的场景中,我们通常会用到计数信号量,它的核心作用是限制同时访问特定资源的线程数量。例如,如果我们要实现一个打印队列,让多个线程按顺序打印任务,Semaphore就可以用来保证打印...

    VC线程信号量的使用举例

    本文将通过一个简单的VC线程信号量使用例子来介绍其工作原理和应用。 信号量是一种同步机制,用于控制对共享资源的访问。它可以计数,当计数值大于0时,表示资源可用;计数值为0,则表示资源已被全部占用。线程试图...

    Visual C++信号量线程同步的简单实例工程

    本实例工程“Visual C++信号量线程同步的简单实例工程”聚焦于如何通过信号量(Semaphore)实现线程间的协调与同步,以确保资源的有效管理和避免竞态条件。 首先,我们需要理解什么是信号量。信号量是一种同步原语...

    python线程信号量semaphore使用解析

    信号量使用示例 以下代码创建了20个线程,但通过设置信号量限制了同一时间最多运行5个线程: ```python import threading import time semaphore = threading.Semaphore(5) def foo(): semaphore.acquire() ...

    JAVA 多线程之信号量(Semaphore)实例详解

    在Java多线程编程中,信号量Semaphore是一种非常重要的同步工具,用于控制对公共资源的访问。Semaphore类位于`java.util.concurrent`包下,它允许我们限制同时访问特定资源的线程数量。 ### Semaphore简介 信号量...

    iOS GCD中级篇 - dispatch_semaphore(信号量)的理解及使用1

    其中,`dispatch_semaphore`(信号量)是GCD的一个重要特性,用于控制对共享资源的访问,避免线程间的竞态条件。信号量在多线程编程中扮演着协调和同步的角色,类似于锁,但它提供了更灵活的控制方式。 1. **信号量...

    Java进程信号量机制的实验程序

    综上所述,Java进程信号量机制是解决多线程环境中资源管理和同步问题的有效工具,通过Semaphore类提供的API,开发者可以灵活地控制并发程度,避免资源过度竞争,保证程序的正确性和效率。在实际项目中,根据需求选择...

    QT 下 信号量使用

    在QT框架中,信号量(Semaphore)是一种非常重要的同步机制,它源于进程间通信(IPC)的概念,并在多线程编程中广泛使用。信号量允许我们控制对共享资源的访问,确保同一时间只有一个线程或者有限数量的线程能够访问...

    使用信号量和关键段实现多线程的同步与互斥

    信号量是一种用于线程间同步的机制,它是一个整数值,可以用来控制对共享资源的访问。在C++中,可以使用`&lt;semaphore&gt;`库来创建和操作信号量。信号量分为两种类型:互斥量(Mutex Semaphore)和计数信号量(Counting...

    山东大学操作系统课设lab3使用信号量解决N线程屏障问题

    总的来说,解决N线程屏障问题的关键在于正确地使用信号量进行同步控制,确保所有线程在特定点等待,直至所有线程到达。在实验中,需要通过调试和修改代码,确保线程间的同步行为符合预期,避免出现竞态条件和其他...

    Linux信号量线程控制--培训教程.pdf

    ### Linux信号量线程控制详解 #### 一、信号量概念及原理 信号量是操作系统中用于进程或线程间同步与互斥的一种机制。...无论是在线程间还是进程间的同步控制,信号量都能够有效地帮助我们实现资源的合理分配和使用。

    LINUX 下C编写UDP 文件传输 运用多线程 队列 信号量

    在Linux环境下,C语言编程实现UDP文件传输是一个挑战性的任务,尤其当涉及到多线程、队列和信号量等并发控制机制时。本项目旨在教你如何有效地构建这样的系统,提高程序的效率和并发性。 首先,UDP(User Datagram ...

    java信号量控制线程打印顺序的示例分享

    Java信号量(Semaphore)是Java并发包`java.util.concurrent.Semaphore`中的一个类,它是一种同步机制,用于控制同时访问特定资源的线程数量。在这个示例中,信号量被用来控制三个线程(A、B、C)按照特定顺序...

    Delphi线程同步(临界区、互斥、信号量).pdf

    临界区适用于同一进程内的线程同步,互斥量支持跨进程同步,而信号量则更适用于控制多个线程对资源的访问次数。根据具体的应用场景选择合适的同步机制,可以有效避免竞态条件的发生,提高程序的稳定性和可靠性。

    有关水果问题的信号量程序

    信号量机制是操作系统中一种重要的同步工具,常用于解决多线程环境中的资源竞争问题。本问题中,通过“爸爸放苹果,妈妈放橘子,盘子只能容纳两个水果。儿子只吃苹果,女儿只吃橘子”的情景,我们可以深入理解信号量...

    让线程按顺序执行8种方法.doc

    八、使用线程的Semaphore(信号量)方法 Semaphore是一个同步工具,可以用于实现线程之间的同步。使用Semaphore可以让线程按顺序执行,并且可以实现线程之间的同步。 让线程按顺序执行有多种方法,每种方法都有其...

    Java多线程Semaphore工具的使用详解.rar

    Semaphore,中文可译为信号量,起源于操作系统中的同步原语,用于协调多个线程对共享资源的访问。它维护了一个计数器,该计数器表示可用许可证的数量。当线程请求许可证时,如果计数器不为零,则会减少一个并允许...

    C语言信号量同步与互斥生产者消费者互斥锁读写者问题哲学家就餐问题课程设计

    信号量机制是操作系统中的一种同步机制,它用于控制多个进程或线程的访问共享资源的顺序。信号量是一种特殊的变量,它可以记录当前系统中可用的资源数量。 在本课程设计中,我们使用C语言的 semaphore.h 库来实现...

    java10个线程按照顺序打印1-100

    在上述的10个线程顺序打印1-100的问题中,可能的解决方案包括但不限于创建一个共享的计数器,使用`synchronized`和`wait/notify`,或者使用`Semaphore`,`CyclicBarrier`等并发工具。每个解决方案都需要考虑线程安全...

Global site tag (gtag.js) - Google Analytics