`
feiniao2029
  • 浏览: 21612 次
  • 性别: 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();
    }
}
分享到:
评论

相关推荐

    Java信号量Semaphore

    Semaphore  Semaphore分为单值和多值两种,前者只能被一个线程获得,...单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场

    生产者和消费者问题程序

    在Windows中,常见的同步对象有:信号量(Semaphore)、互斥量(Mutex)、临界段(CriticalSection)等。使用这些对象都分为三个步骤,一是创建或者初始化:接着请求该同步对象,随即进入临界区,这一步对应于互斥量的上锁...

    Java并发编程(学习笔记).xmind

    信号量(Semaphore) 用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量 管理者一组虚拟的许可。acquire获得许可(相当于P操作),release释放许可(相当于V操作) 应用...

    操作系统课程设计生产者和消费者问题源代码

    在Windows中,常见的同步对象有:信号量(Semaphore)、互斥量(Mutex)、临界段(CriticalSection)等。使用这些对象都分为三个步骤,一是创建或者初始化:接着请求该同步对象,随即进入临界区,这一步对应于互斥量的上锁...

    结合来做动画同时解决多个动画顺序执行的问题 iOS

    解决这个问题的方法是使用dispatch_semaphore_t信号量来控制等待,直到遇到动画的时候等待,动画完成后再继续跑算法,这个方法只有在算法处于分线程时可以做到,否则会阻塞动画的执行。将塔做了对象抽象出来,将其...

    Java并发编程实战

    5.5.3 信号量82 5.5.4 栅栏83 5.6 构建高效且可伸缩的结果缓存85 第二部分 结构化并发应用程序 第6章 任务执行93 6.1 在线程中执行任务93 6.1.1 串行地执行任务94 6.1.2 显式地为任务创建线程94 6.1.3 ...

    javaSE代码实例

    17.4 信号量的使用 393 17.4.1 Semaphore类简介 393 17.4.2 Semaphore类的具体使用 394 17.5 队列 396 17.5.1 Queue接口介绍 396 17.5.2 PriorityQueue类的知识与使用 397 17.5.3 BlockingQueue接口...

    用vc编写简单操作系统教程

    //读者信号量 共允许3个读者同时进行 //线程体 bool who[3]={false}; DWORD WINAPI ReaderThreadFun(PVOID param) { CReader_WriterDlg * pWnd=(CReader_WriterDlg *)param; int iStep = 0; //申请信号量 if...

    java核心知识点整理.pdf

    线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .........................

    JAVA核心知识点整理(有效)

    2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .....................

Global site tag (gtag.js) - Google Analytics