`
cy729215495
  • 浏览: 128633 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

线程池同步的解决办法

 
阅读更多

   jdk1.5的threadpoolexecutor ,要在任务全部处理完后在接着做别的事情,这就涉及同步的做法了,有2种办法:

 

 

 ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 20,0, TimeUnit.SECONDS, new ArrayBlockingQueue(10),
        new ThreadPoolExecutor.DiscardOldestPolicy());
    for (int i = 0; i < 10; i++) {
      executor.submit(new ThdRun(i));
    }
    executor.shutdown();
    try {
      executor.awaitTermination(100, TimeUnit.DAYS);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    System.out.println("finish!");

输出结果为:

0
1
2
3
5
6
7
8
9
4
finish!

  

 

       还一种做法就是:

 

          

  ExecutorService executor = Executors.newFixedThreadPool(3);
    
    for (int i = 0; i < 10; i++) {
      executor.submit(new ThdRun(i));
    }
    executor.shutdown();
    try {
      executor.awaitTermination(100, TimeUnit.DAYS);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    System.out.println("finish!");

 

   也能达到同样的效果.

    不过这两种方法还是的不同,如果run方法里面耗时长的(比如io)话。方法一任务就没有全部处理完,比如我拷贝50个文件,结果直拷贝了30几个,但是我用了个耗时长的while循环很正常怪呀,不知道是什么原因,怪。

分享到:
评论
1 楼 fei2115958 2009-10-09  
这些方法都不是很好,阻塞线程要用barrier!
即:java.util.concurrent.CyclicBarrier。

相关推荐

    使用Netty解决TCP粘包和拆包问题过程详解

    // 优雅退出,释放线程池资源 bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } private class ChildChannelHandler extends ChannelInitializer&lt;SocketChannel&gt; { @Override ...

    解决Java程序内存溢出的办法

    8. **代码审查**:定期进行代码审查,查找可能导致内存问题的代码片段,如无限制地创建线程池、未关闭的网络连接等。 9. **并发控制**:并发问题可能导致内存竞争,使得内存管理复杂化。使用适当的同步机制,如...

    NET面试题-多线程编程与线程同步1

    解决办法通常使用控件的Invoke或BeginInvoke方法,确保在正确的线程上执行操作。 3. **后台线程与前台线程**: - 前台线程是维持进程运行所必需的,当所有前台线程结束时,进程也将终止。后台线程则不会影响进程的...

    C#使用读写锁三行代码简单解决多线程并发的问题

    为了解决这个问题,我们可以利用C#中的读写锁(ReaderWriterLockSlim)来实现线程同步。本文通过三行代码展示了如何使用读写锁解决多线程并发写入文件的冲突。 读写锁的核心在于,它允许多个线程同时读取资源,但只...

    .Net 多线程详解

    • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? • 为什么Winform不允许跨线程修改UI线程控件的值 ...

    权威.NET多线程详解(源码示例)

    解决办法是使用Invoke或BeginInvoke方法,这两个方法会在UI线程中安全地执行传入的委托,避免线程冲突。 ### 线程池 线程池是一组预创建的线程,用于执行任务,降低了创建和销毁线程的开销。每个进程有自己的线程池...

    25.MySQL是怎么保证高可用的?1

    解决办法包括一主多从和利用外部系统如Hadoop进行数据分析。 - **大事务**:主库执行的大事务会导致备库同步速度减慢,因为大事务需要更多时间来执行和回滚。 为了减少主备延迟并提高高可用性,可以采取以下策略:...

    高级面试题.docx

    解决办法是在适当位置执行注销操作。 - **资源未关闭**:如数据库连接、文件流等,未在使用完毕后关闭,可能导致内存泄漏。记得使用 try-catch-finally 或 try-with-resources 结构来确保资源关闭。 - **静态变量...

    多线程和socket网络编程精讲 上课讲义.docx

    解决办法是将耗时操作放到新的线程中执行,以保持主线程的响应性。 多线程编程的优缺点并存。优点包括能够处理多个任务,提高程序执行效率和资源利用率。特别是在多核CPU环境下,多线程可以实现真正的并行处理。...

    C#窗体多线程[归类].pdf

    传统的解决办法是使用C++等语言进行多线程编程,但在.NET Framework的支持下,包括C#在内的多种语言都可以方便地实现多线程。 **为什么选择多线程?** 多线程允许程序在后台执行长时间任务,同时保持UI的实时性。...

    15道面试常问的Java多线程面试题!.zip

    5. **死锁的概念和解决办法?** 死锁是指两个或多个线程相互等待对方释放资源,导致无法继续执行。解决死锁通常采用避免循环等待、设置超时、资源预分配等策略。 6. **wait()、notify()和notifyAll()的区别?** ...

    《java并发编程艺术》

    - **ThreadLocal内存泄漏**:潜在的问题及解决办法。 7. **Java并发编程的最佳实践** - **线程安全的设计模式**:如单例模式的线程安全实现、双重检查锁定等。 - **并发编程原则**:避免阻塞、减少锁的使用、...

    多线程编程介绍

    常见的解决办法包括锁(互斥量、信号量)、同步机制(synchronized关键字、条件变量)和无锁编程。 2. 死锁:两个或更多线程相互等待对方释放资源,导致无法继续执行。避免死锁的方法包括避免循环等待、设置超时和...

    利用多线程基于TCP扫描目的主机端口程序--课程设计(含课程报告和代码).rar

    4. 测试与优化:展示实验结果,讨论可能遇到的问题以及解决办法,比如线程同步问题、超时设定等。 “源代码”文件则包含了实际的编程实现,可能使用了如Java、Python或C++等支持多线程的编程语言。编程中可能涉及的...

    socket源码及资料

    5. **常见问题及解决办法**: - **连接超时**:设置合适的超时时间,或者使用异步方式避免阻塞。 - **数据包丢失**:在UDP中可能出现,可以设计重传机制。 - **半关闭连接**:TCP连接中,一方关闭连接后另一方...

    problem-solving:此仓库用于解决问题

    通常这样的描述意味着它可能涵盖了各种各样的问题,可能是编程挑战、常见错误的解决办法或者是对特定技术问题的探讨。 标签“Java”进一步确认了这个项目与Java编程语言直接相关。Java是一种广泛使用的面向对象的...

    藏经阁-Java开发手册(泰山版)灵魂13问-117.pdf

    解决办法是在使用前确保所有可能出现的null值已经得到妥善处理。 2. **初始化HashMap的容量大小**: 阿里巴巴建议初始化HashMap时指定容量,以避免内部扩容操作带来的性能开销。合适的初始化容量取决于预期的元素...

    Java实效编程百例.rar

    这类文件通常会解释文件的结构,使用条件,以及可能遇到的问题和解决办法,对于理解和利用这些代码示例至关重要。 "源码网.url"是一个链接,可能指向一个在线平台或社区,提供更多的Java源码和编程资源。访问这个...

    最新全JVM优化及面试热点分析.zip

    - **内存溢出问题**:堆溢出、栈溢出、 PermGen/Metaspace 溢出的常见原因和解决办法。 - **垃圾回收优化**:如何通过调整新生代与老年代的比例,设置合适的GC参数来减少暂停时间或提高吞吐量。 3. **JVM性能优化...

Global site tag (gtag.js) - Google Analytics