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

semphore线程执行的排队

    博客分类:
  • java
 
阅读更多
package endual;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

/**
 * semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用semaphore可以控制同时访问
 * 资源的线程个数,例如,实现一个文件运行的并发访问数。
 *    semaphore实现的功能类似于厕所有五个坑,那么假如有10个人来上厕所,那么同时能去上的值能是5
 *    个,其余的5个还是要等的,如果另外5个人中又有一个可以占用了,那么就可以上去了
 *    另外等待的5个人中可以是随机获得优先机会,也可以是按照先来后到得的顺序获取机会的,这取决于与构造
 *    semaphore对象传入的参数选项
 * @author endual
 *
 */
public class SemaphoreApp {

	public static void main(String[] args) {
		
		final ExecutorService es = Executors.newCachedThreadPool() ; //自动的开启线程
		final Semaphore sp = new Semaphore(3) ;
		
		for (int i=0; i < 10; i++) {
			System.out.println("---******----");
			Runnable command = new Runnable() {

				public void run() {

					try {
						sp.acquire() ;
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
					System.out.println();
					System.out.println("----------进入--------------------------");
					System.out.println(Thread.currentThread().getName() );
					System.out.println( "剩余下有用的坑的个数是: " + (sp.availablePermits()));
					try {
						Thread.sleep(10000) ;
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println("_____________离开_________________________");
					System.out.println();
					sp.release() ;
					System.out.println("已经离开了信号灯,当前可以用的坑的个数有 :" + (sp.availablePermits()));
				
				} //end run
				
			}; //end new
			es.execute(command) ; //执行线程
		} //end for 
		
		
	} //end main
} //end class 

 

 

 

  这个的话,结合线程池的使用就可以了。在同一时间,指定并发执行的线程的个数的。

分享到:
评论

相关推荐

    cas.tar.gz_CAS_Mutex_multithread_semphore

    在标题"CAS.tar.gz CAS Mutex multithread semphore"中,我们可以看出这是关于多线程环境下使用CAS(Compare and Swap)实现互斥锁(Mutex)和信号量(Semaphore)的一个资源包。这通常涉及到并发控制、线程安全和...

    SYS_BISO_semphore_dsp_

    任务是执行特定操作的独立执行单元,它们可以并发运行。定时器用于设置周期性或一次性事件。队列则用于任务间的数据传递。内存池管理预分配的内存块,提高内存分配效率。 【CCS】Code Composer Studio集成了编译、...

    信号量Semaphore了解过吗?

    线程试图获取资源时,会尝试将信号量减1,如果此时信号量为0,则线程会被阻塞,直到其他线程释放资源,信号量值变回1,阻塞的线程才会被唤醒并继续执行。 2. **计数信号量**: 计数信号量可以有任意非负整数值,...

    Python线程下使用锁的技巧分享

    使用诸如Lock、RLock、Semphore之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现异常时可以正常的释放锁。 典型代码如下: try: lock.acquire() #关键部分 ......

    rust-semaphore:原子计数信号量

    信号原子计数信号量,可以帮助您控制并发系统中多个进程对公共资源的访问。特征有效的无锁*语义提供RAII风格的获取/发布API 实现Send , Sync和Clone *不使用shutdown API时无锁定

    The Little Book of Semaphores

    本书不仅对计算机科学专业学生,尤其是那些对操作系统和多线程编程感兴趣的人,提供了宝贵的资源,同时也适合任何希望加深对并发控制机制理解的技术人员阅读。 ### 信号量与并发控制 信号量是操作系统中用于解决...

Global site tag (gtag.js) - Google Analytics