关闭

ExecutorService使用

138人阅读 评论(0) 收藏 举报
分类:

参考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
查看评论

java ExecutorService 使用

下面的例子主要讨论两个问题: 问题1.线程池固定大小,假设为5.那么向线程池放入10个线程,运行效果如何?其他线程的状态? 问题2.那么如何从线程池中移除某一个线程,确切说是使某一个线程成为空闲线程? 例子: package com.dada.executorService;...
  • tengdazhang770960436
  • tengdazhang770960436
  • 2014-03-27 14:24
  • 5306

executors和executorService使用例子

还是直接上代码来说明。 1.  TaskExecutorThread.java为数据响应队列线程池: package threadpool; import java.util.LinkedList; import org.apache.log4j.Logger; import org...
  • linwei_1029
  • linwei_1029
  • 2011-10-21 11:00
  • 4448

Java ExecutorService 例子--教程

Reference:https://examples.javacodegeeks.com/core-java/util/concurrent/executorservice/java-executorservice-example-tutorial/ ExecutorService is ...
  • hintcnuie
  • hintcnuie
  • 2016-12-14 10:31
  • 611

使用Executors创建ExecutorService对象原理简析

相信有很多同学一提到用线程池去控制线程,就有一种无从下手的感觉,大脑瞬加发麻,放心我将教大家怎么创建线程池,下面开始啦!  大家快打开as准备走起      Executors就是一个生产线程池对象的工厂,它提供了很多静态方法给大家调用,只需一...
  • chun_long
  • chun_long
  • 2017-02-28 15:33
  • 505

使用ExecutorService、Callable、Future实现有返回结果的多线程 应用实例

以下是实践中应用到的多线程:    1、controller代码:     @RequestMapping(value = "/getTraingingUsersByTrainingIds", method = {Request...
  • wanggang19840529
  • wanggang19840529
  • 2016-08-10 18:13
  • 632

使用ExecutorService作为局部变量…

ExecutorService 比较重,牵扯到线程,对线程的GC和GC常规对象是有很大的不同   最佳实践, 如果对象提供了shutdown,close等方法,一定要记得在用完后调用这些方法以释放资源,否则会出现资源泄露的情况    =============...
  • zilaike
  • zilaike
  • 2017-10-13 16:37
  • 112

在使用lock 和 ExecutorService 时需要注意的问题

在最近的项目中,有这样一个需求,有一个计算量比较大的功能,在一个用户触发一次计算任务之后,在这个任务结束之前不能让该用户再次触发计算任务,但是又不能影响到别的用户使用这个计算任务。先不讨论这样的需求的合理性,单从技术角度来看一下这个问题。      在项目中,另外一位同...
  • shecanwin
  • shecanwin
  • 2017-01-10 10:05
  • 585

ExecutorService引发的血案(二)ExecutorService使用

上一节中讲到了ExecutorService中有一些管理Thread的方法execute(Runnable) submit(Runnable) submit(Callable) invokeAny(...) invokeAll(...)execute(Runnable)这个方法使用的参数是 java...
  • u010940300
  • u010940300
  • 2015-12-10 18:10
  • 5557

ExecutorService实现线程池

ExecutorService是java自带线程池 线程池的作用:线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列...
  • wangxy799
  • wangxy799
  • 2016-03-25 10:42
  • 748

Java并发包:ExecutorService和ThreadPoolExecutor

文章译自:http://tutorials.jenkov.com/java-util-concurrent/index.html 抽空翻译了一下这个教程的文章,后面会陆续放出,如有不妥,请批评指正。 转自请注明出处。 ExecutorServiceJava.util.concurrent.E...
  • zxc123e
  • zxc123e
  • 2016-07-12 17:50
  • 3557
    个人资料
    • 访问:12800次
    • 积分:648
    • 等级:
    • 排名:千里之外
    • 原创:55篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条