返回顶部
首页 > 资讯 > 精选 >Java Swing 多线程加载图片(保证顺序一致)
  • 175
分享到

Java Swing 多线程加载图片(保证顺序一致)

javaswing多线程 2023-05-30 17:05:43 175人浏览 独家记忆
摘要

大二的时候做的课程设计,图片管理器,当时遇到图片很多的文件夹,加载顺序非常慢。虽然尝试用多个Thread加载图片,却无法保证图片按顺序加载。直到今天学会了使用Callable接口和Future接口,于是心血来潮实现了这个功能。废话不多说,看

大二的时候做的课程设计,图片管理器,当时遇到图片很多的文件夹,加载顺序非常慢。虽然尝试用多个Thread加载图片,却无法保证图片按顺序加载。直到今天学会了使用Callable接口和Future接口,于是心血来潮实现了这个功能。

废话不多说,看代码。

多线程加载图片(核心):

package com.lin.imagemgr;import java.awt.Dimension;import java.awt.image.BufferedImage;import java.io.File;import java.io.FilenameFilter;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.stream.Collectors;import javax.swing.ImageIcon;import javax.swing.JLabel;import net.coobird.thumbnailator.Thumbnails;public class ImageMgr { private static ImageMgr instance = new ImageMgr(); private ImageMgr() {} public static ImageMgr getInstance() {  return instance; } //线程池 private ExecutorService executor = Executors.newFixedThreadPool(8); public List<JLabel> loadImages(String path) {  List<JLabel> images = new ArrayList<>();  File file = new File(path);  if (!file.isDirectory()) {   throw new RuntimeException("need directory!");  }  File[] files = file.listFiles(new FilenameFilter() {   @Override   public boolean accept(File dir, String name) {    //thumbnail只支持jpg??    if (name.endsWith(".jpg")) {     return true;    }    return false;   }  });  //并发加载图片,并使用Future保存加载结果  List<Future<MyLabel>> futures = new ArrayList<>();  for (final File f : files) {   Future<MyLabel> future = executor.submit(() -> {    return new MyLabel(f.getName(), f.getAbsolutePath());   });   futures.add(future);  }  //等待所有并发加载返回结果  try {   for (Future<MyLabel> future : futures) {    MyLabel icon = future.get();    images.add(icon);   }  } catch (InterruptedException e) {   e.printStackTrace();  } catch (ExecutionException e) {   e.printStackTrace();  }  //Java8使用stream api 进行排序  List<JLabel> sortedList = images.stream().sorted().collect(Collectors.toList());  return sortedList; } //继承JLabel并实现Comparable接口,从而对JLabel进行排序 private static class MyLabel extends JLabel implements Comparable<MyLabel>{  private static final long serialVersionUID = 1L;  private String fileName;  public MyLabel(String fileName, String fullPath) {   this.fileName = fileName;   //使用thumbnailator生成缩略图   try {    BufferedImage bufferedImage = Thumbnails.of(fullPath)     .size(100, 120)    .asBufferedImage();    setIcon(new ImageIcon(bufferedImage));    setPreferredSize(new Dimension(100, 120));   } catch (IOException e) {    e.printStackTrace();   }  }  @Override  public int compareTo(MyLabel o) {   int result = this.fileName.compareTo(o.fileName);   return result;  } }}

--结束END--

本文标题: Java Swing 多线程加载图片(保证顺序一致)

本文链接: https://www.lsjlt.com/news/220157.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java Swing 多线程加载图片(保证顺序一致)
    大二的时候做的课程设计,图片管理器,当时遇到图片很多的文件夹,加载顺序非常慢。虽然尝试用多个Thread加载图片,却无法保证图片按顺序加载。直到今天学会了使用Callable接口和Future接口,于是心血来潮实现了这个功能。废话不多说,看...
    99+
    2023-05-30
    java swing 多线程
  • Java中保证线程顺序执行的操作代码
    只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的。如果只是创建三个线程然后执行,最后的执行顺序是不可预期的。这是因为在创建完线程之后,线程执行的开始时间取决于CPU何...
    99+
    2024-04-02
  • Python 多线程并发下载图片 保姆级教程
    有时候,下载大量图像需要几个小时——让我们来解决这个问题我明白了——你已经厌倦了等待你的程序下载图像。有时我必须下载数千张图像需要几个小时,而且你不可能一直等待你的程序完成下载这些愚蠢的图像。你有很多重要的事情要做。让我们构建一个简单的图像...
    99+
    2023-05-17
    多线程并发 下载图片 高效
  • 怎么深入理解Java多线程与并发框中的顺序一致性模型
    怎么深入理解Java多线程与并发框中的顺序一致性模型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、竞态条件(Race Condition)计算的正确性取决于 多个线程 执行...
    99+
    2023-06-05
  • 在java程序中怎么保证多线程的运行安全
    java程序中保证多线程运行安全的方式:使用安全类,比如 Java. util. concurrent 下的类。使用自动锁 synchronized。使用手动锁 Lock。保证一个或者多个操作在CPU执行的过程中不被中断。保证一个线程对共享...
    99+
    2024-04-02
  • Java commons io包实现多线程同步图片下载入门教程
    目的: 实现多线程同时下载网络图片,入门级。 多线程入门 commons io: 是针对开发IO流功能的工具类库,其中包含了许多可调用的函数。 1.commons io 可直接百度,...
    99+
    2024-04-02
  • Java中多线程下载图片并压缩能提高效率吗
    目录前言实现思路实测前言 需求 导出Excel:本身以为是一个简单得导出,但是每行得记录文件中有一列为图片url,需要下载所有记录行对应得图片,然后压缩整个文件夹。 这里只做4....
    99+
    2024-04-02
  • Java同步与锁机制:保证多线程程序的正确性与可靠性
    随着计算机硬件的快速发展,多核处理器已经成为了主流,多线程编程已经成为了不可避免的趋势。然而,多线程编程也带来了一些问题,例如线程安全问题、死锁问题、竞争条件等等。Java作为一种广泛应用于企业级应用的编程语言,提供了一些同步机制和锁机制...
    99+
    2023-11-09
    同步 numy 日志
  • Java中多线程下载图片并压缩能不能提高效率
    小编给大家分享一下Java中多线程下载图片并压缩能不能提高效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言需求 导出Excel:本身以为是一个简单得导出,但...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作