多线程线程池控制一个方法的并发量 限制只有5个线程执行任务
2016-06-17 15:04
911 查看
方法1:
方法2:
public class ThreadPoolTest { /** * 信息量 */ private static Semaphore semaphore = new Semaphore(5);//相当于放了5把锁 public static void main(String[] args) { for (int i = 0; i < 100; i++) { new Thread(new Runnable() { @Override public void run() { try { method(); } catch (Exception e) { e.printStackTrace(); } } }).start(); } } private static void method() throws Exception { semaphore.acquire(); //让这个方法获得一把锁 System.out.println(Thread.currentThread().getName() + "进来了"); Thread.sleep(500); System.out.println("...." + Thread.currentThread().getName() + "出去了..."); semaphore.release();//用完之后释放 } }
方法2:
public class ThreadPoolTest2 { public static void main(String[] args) { BlockingQueue<Runnable> blockingQueue = new LinkedBlockingDeque<Runnable>(50); /* * 参数1:核心池个数 * 参数2:最大线程池个数 * 参数3:任务执行完后 核心线程池以外的线程销毁时间 * 参数3:时间单位 * 参数5:储存任务的任务队列 * 参数6:线程工厂 */ ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5, 10, 1, TimeUnit.SECONDS, blockingQueue, new ThreadFactory() { //一个提供原子操作的Integer的类 i++线程不安全 AtomicInteger atomicInteger = new AtomicInteger(0); @Override public Thread newThread(Runnable r) { //把任务r给新创建的线程 Thread thread = new Thread(r); //给线程设置名称 thread.setName("MyThread:"+ atomicInteger.getAndIncrement()); return thread; } }); //如果执行的任务大于 存储任务队列的个数+最大线程池个数 就会抛出java.util.concurrent.RejectedExecutionException异常 for (int i = 0; i < 110; i++) { poolExecutor.execute(new Runnable() { @Override public void run() { try { method(); } catch (Exception e) { e.printStackTrace(); } } }); } } private static void method() throws Exception { System.out.println(Thread.currentThread().getName() + "进来了"); Thread.sleep(200); System.out.println("...." + Thread.currentThread().getName() + "出去了..."); } }
相关文章推荐
- [转] Tomcat 配置 SSL
- Android 小知识点
- linux expect的使用详解
- OC瀑布流可拓展headView
- windows下安装redis
- swift学习03-可选类型Optional
- 自定义全局异常捕获
- hjr-JAVA:JAVA环境变量配置与运行第一个JAVA程序
- ListView侧滑删除
- android调试系列--使用ida pro调试so
- Intellij IDEA15:加载resources文件
- 创建oracle数据表
- apk打包时去除无用资源
- 【bzoj3038】上帝造题的七分钟2
- JavaScript强化教程-JS面向对象编程
- sencha Touch项目常见命令
- iOS开发 - 第02篇 - UI进阶 - 14 - 彩票(第一天)
- java技术论文
- Android音视频相关知识
- 【ROS Gazebo专题】四、将Fetch机器人放到Gazebo中进行玩耍