欢迎来到天天文库
浏览记录
ID:34417315
大小:39.00 KB
页数:3页
时间:2019-03-05
《java进程信号量机制的实验程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Java信号量机制的程序实验Java的信号量实际上是一个功能完毕的计数器,对控制一定资源的消费与回收有着很重要的意义,信号量常常用于多线程的代码中,并能监控有多少数目的线程等待获取资源,并且通过信号量可以得知可用资源的数目等。(1)程序的功能:程序利用线程池,开辟一块内存空间,里面存放数个的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。调度期间,程序判断各线程所需资源数,当要加入的池的线程(或者任务)超过池最大
2、尺寸时候,则入此线程池需要排队等待。一旦池中有线程完毕,则排队等待的某个线程会入池执行。编程软件版本:JavaEclipseSDK3.5.0(2)代码:importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Semaphore;/*一个池*/classMyPool{privateSemaphoresp;//池相关的信号量/*池的大小,这个大小会传递给信号量*@par
3、amsize池的大小*/MyPool(intsize){this.sp=newSemaphore(size);}publicSemaphoregetSp(){returnsp;}publicvoidsetSp(Semaphoresp){this.sp=sp;}}classMyThreadextendsThread{privateStringthreadname;//线程的名称privateMyPoolpool;//自定义池privateintx;//申请信号量的大小MyThread(Stringthreadname,My
4、Poolpool,intx){this.threadname=threadname;this.pool=pool;this.x=x;}publicvoidrun(){try{//从此信号量获取给定数目的许可pool.getSp().acquire(x);System.out.println(threadname+"成功获取了"+x+"个许可!");}catch(InterruptedExceptione){e.printStackTrace();}finally{//释放给定数目的许可,将其返回到信号量。pool.get
5、Sp().release(x);System.out.println(threadname+"释放了"+x+"个许可!");}}}publicclassTest{publicstaticvoidmain(String[]args){MyPoolmyPool=newMyPool(20);//创建线程池ExecutorServicethreadPool=Executors.newFixedThreadPool(2);MyThreadt1=newMyThread("任务A",myPool,3);MyThreadt2=newMy
6、Thread("任务B",myPool,12);MyThreadt3=newMyThread("任务C",myPool,7);//在线程池中执行任务threadPool.execute(t1);threadPool.execute(t2);threadPool.execute(t3);//关闭池threadPool.shutdown();}}(3)运行、测试结果:任务A成功获取了3个许可!任务A释放了3个许可!任务C成功获取了7个许可!任务C释放了7个许可!任务B成功获取了12个许可!任务B释放了12个许可!(4)对程序
7、的分析、总结:java.util.concurrent是在并发编程中很常用的实用工具类。此包包括了几个小的、已标准化的可扩展框架,以及一些提供有用功能的类,没有这些类,这些功能会很难实现或实现起来冗长乏味。ExecutorService、Executors是其组建。Executor是一个简单的标准化接口,用于定义类似于线程的自定义子系统,包括线程池、异步IO和轻量级任务框架。ExecutorService提供了多个完整的异步任务执行框架。Semaphore一个计数信号量。从概念上讲,信号量维护了一个许可集合。如有必要,在
8、许可可用前会阻塞每一个acquire(),然后再获取该许可。每个release()添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore只对可用许可的号码进行计数,并采取相应的行动。Semaphore通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。由荷兰学者Dijkst
此文档下载收益归作者所有