51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1724|回复: 0
打印 上一主题 下一主题

【我分享】java并行执行多个任务

[复制链接]
  • TA的每日心情
    慵懒
    2017-7-9 10:38
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2015-1-6 08:40:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    java并行执行多个任务:
    最近做项目中,有个任务需要实现并发编程,个人参考了下网上的实现,自己实现了下并发方法,并且增加了简单的说明,希望的有需要的朋友有些帮助。

    [java] [url=]view plaincopy[/url]

    • <pre code_snippet_id="202406" snippet_file_name="blog_20140224_1_9891540" name="code" class="java">import java.util.UUID;
    • import java.util.concurrent.CountDownLatch;
    • import java.util.concurrent.ExecutorService;
    • import java.util.concurrent.Executors;
    • /**
    • * 测试监控类
    • *
    • * @author
    • *
    • */
    • public class WatchThread {
    •     private String name = UUID.randomUUID().toString();
    •     /**
    •      * 测试函数
    •      *
    •      * @throws InterruptedException
    •      */
    •     public void testThread() throws InterruptedException {
    •         int threadNum = 10;
    •         // 初始化countDown
    •         CountDownLatch threadSignal = new CountDownLatch(threadNum);
    •         // 创建固定长度的线程池
    • //      Executor executor = Executors.newFixedThreadPool(threadNum);
    •         //此处不可以用接口 需要使用Executor的实现类 ExecutorService  Executor未提供shutdown等方法
    •         ExecutorService executor = Executors.newFixedThreadPool(threadNum);
    •         for (int i = 0; i < threadNum; i++) { // 开threadNum个线程
    •             Runnable task = new TestThread(threadSignal);
    •             // 执行
    •             executor.execute(task);
    •         }
    •         threadSignal.await(); // 等待所有子线程执行完
    •         //固定线程池执行完成后 将释放掉资源 退出主进程
    •         executor.shutdown();//并不是终止线程的运行,而是禁止在这个Executor中添加新的任务
    •         // do work end
    •         //退出主进程
    •         System.out.println(Thread.currentThread().getName() + "+++++++结束.");
    •     }
    •     /**
    •      * 测试函数
    •      */
    •     public static void main(String[] args) throws InterruptedException {
    •         WatchThread test = new WatchThread();
    •         test.testThread();
    •     }
    •     /**
    •      *
    •      * @author wangmuming
    •      * 此可以做完内部类 也可以不做未内部类
    •      * 作为内部类的时候 有一个好处 就是可以直接引用给类的主对象的成员变量 如此处的name
    •      * 当然
    •      */
    •     private class TestThread implements Runnable {
    •         private CountDownLatch threadsSignal;
    •         public TestThread(CountDownLatch threadsSignal) {
    •             this.threadsSignal = threadsSignal;
    •         }
    •         public void run() {
    •             System.out.println(Thread.currentThread().getName() + "开始..." + name);
    •             System.out.println("开始了线程::::" + threadsSignal.getCount());
    •             // do shomething
    •             //核心处理逻辑
    •         //  用到成员变量name作为参数
    •             // 线程结束时计数器减1
    •             threadsSignal.countDown();//必须等核心处理逻辑处理完成后才可以减1
    •             System.out.println(Thread.currentThread().getName() + "结束. 还有"
    •                     + threadsSignal.getCount() + " 个线程");
    •         }
    •     }
    • }</pre><br>
    • <pre></pre>
    • <p></p>
    • <pre></pre>
    • <p>执行结果:</p>
    • <p><br>
    • </p>
    • <p>pool-1-thread-1开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • 开始了线程::::10<br>
    • pool-1-thread-1结束. 还有9 个线程<br>
    • pool-1-thread-2开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • 开始了线程::::9<br>
    • pool-1-thread-2结束. 还有8 个线程<br>
    • pool-1-thread-3开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • 开始了线程::::8<br>
    • pool-1-thread-3结束. 还有7 个线程<br>
    • pool-1-thread-4开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • pool-1-thread-5开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • 开始了线程::::7<br>
    • 开始了线程::::7<br>
    • pool-1-thread-4结束. 还有6 个线程<br>
    • pool-1-thread-5结束. 还有5 个线程<br>
    • pool-1-thread-10开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • 开始了线程::::5<br>
    • pool-1-thread-6开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • pool-1-thread-9开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • 开始了线程::::4<br>
    • pool-1-thread-9结束. 还有3 个线程<br>
    • pool-1-thread-8开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • 开始了线程::::3<br>
    • pool-1-thread-8结束. 还有2 个线程<br>
    • pool-1-thread-7开始...aaa917dc-bd69-4438-9bb1-0051e5c62984<br>
    • 开始了线程::::2<br>
    • pool-1-thread-7结束. 还有1 个线程<br>
    • 开始了线程::::4<br>
    • pool-1-thread-10结束. 还有4 个线程<br>
    • pool-1-thread-6结束. 还有0 个线程<br>
    • main+++++++结束.<br>
    • </p>
    • <p></p>


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-18 07:10 , Processed in 0.067800 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表