ExecutorService使用

参考Android API:http://www.android-doc.com/reference/java/util/concurrent/ExecutorService.html

eg:

ExcecutorService为线程池接口,将线程加进线程池中,execute后不是马上执行,在不久未来异步执行线程。所以会产生并发问题,需要对线程中的共享资源加锁。

import java.util.concurrent.*;
import java.util.*;
class ExecutorServiceTest
{
	static final int COUNT=10;

	static int signal=1;
	public static void main(String[] args) 
	{
		ExecutorService pool=Executors.newFixedThreadPool(COUNT);
		int i;
		for(i=0;i<COUNT+10;i++){
			pool.execute(getThread());
		}
		pool.shutdown();
		for(i=0;i<COUNT+10;i++){//抛出异常java.util.concurrent.RejectedExecutionException因为pool.shutdow<span style="white-space:pre">		</span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">		pool.execute(getThread());</span>
		}
	}

	public static Runnable getThread(){
		return new Runnable(){
			public void run(){
				synchronized(b.class){  //
					System.out.println("signal="+signal);
					signal++;
				}
			}
		};
	}
}

2.Semaphore信号量类的使用:用于控制线程池中的线程数量,以达到线程公平分配资源的效果。

eg:

acquire()方法:若池中的线程数量已经达到了信号量规定的线程数量,该线程则在线程池外边等着;反之,该线程进入到线程池中。

release()方法:若线程池中的一个线程执行完毕,则将信号量减一。

eg:一个厕所三个坑,门外有盏信号灯,信号灯显示坑被占用了的数量。没有空坑,就在门外先等着;有,就可以进厕所去占坑。

import java.util.concurrent.*;
import java.util.*;
class b
{
	static final int COUNT=10;

	static int signal=1;
	static Semaphore s;

	public static void main(String[] args) throws Exception
	{
		ExecutorService pool=Executors.newFixedThreadPool(COUNT);
		s=new Semaphore(3);
		int i;
		for(i=0;i<COUNT;i++){
			s.acquire();
			pool.execute(getThread(i+1));
		}
		pool.shutdown();
	}

	public static Runnable getThread(int i){
		return new Runnable(){
			public void run(){
				synchronized(b.class){
					System.out.println("signal="+signal+"  i="+i);
					signal++;
					b.s.release();
				}
			}
		};
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值