ExecutorService使用
来源:互联网 发布:微博评论屏蔽淘宝链接 编辑:程序博客网 时间:2024/06/04 19:35
参考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
- ExecutorService使用
- ExecutorService使用
- FutureTask、ExecutorService的使用
- ExecutorService,Executors 使用
- java ExecutorService 使用
- ExecutorService理解与使用
- ExecutorService理解与使用
- ExecutorService线程使用
- ExecutorService 的使用
- ExecutorService的使用
- ExecutorService使用技巧
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- ExecutorService
- 百度地图定位开发
- Redis统计某个时间段订单数量(用Guava缓存辅助解决)
- 交换机和路由器的数据包转发流程简述
- Qt5乱码问题
- 详解浏览器缓存机制与Apache设置缓存
- ExecutorService使用
- 阿里大于短信接口
- Ext Grid checkBox 监听事件
- 在Android开发中使用MVP模式
- 创建普通用户登录并使用Hadoop集群遇到的若干问题
- Matlab软件的矩阵和数组操作
- 创建第一个Django工程
- spring管理Struts2的action时应配置scope="prototype"
- 商业楼与写字楼的区别详解