优化技巧:Java多线程同步问题示例

原创 ゞ 浴缸里的玫瑰 2024-09-11 22:51 70阅读 0赞

在Java多线程编程中,同步问题是常见的挑战。以下是一个简单的示例,展示了线程同步的常见问题。

  1. 示例代码:

    1. // 多个任务,每个任务执行时间不确定
    2. public class UnsynchronizedTasks {
    3. private final List<Runnable> tasks = new ArrayList<>();
    4. // 添加任务,但不保证添加后立即执行
    5. public synchronized void addTask(Runnable task) {
    6. tasks.add(task);
    7. }
    8. // 执行所有任务
    9. public synchronized void executeAll() {
    10. for (Runnable task : tasks) {
    11. task.run();
    12. }
    13. }
    14. }
  2. 问题:

  • addTask 方法中,添加任务后没有立即执行,这可能导致线程饥饿。
  • executeAll 方法中,所有任务的执行是同步的,如果某个任务执行时间过长,可能会导致整个系统阻塞。
  1. 解决方案:
  • 使用 ExecutorService 提供异步执行任务的方法,如 Executors.newFixedThreadPool(5) 用于创建一个固定大小的线程池。
  • addTask 方法中,使用 submit() 方法提交任务,确保任务是异步执行的。
  • 如果需要同步执行所有任务,可以考虑在 executeAll 方法中使用 shutdownNow() 获取未启动的任务列表,然后对这些任务进行同步处理。
文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,70人围观)

还没有评论,来说两句吧...

相关阅读