Java如何判断线程池所有任务是否执行完毕

Java如何判断线程池所有任务是否执行完毕,第1张

如果任务是有返回结果的,结合callable接口使用线程池返回Futrue,然后遍历所有Futerue获取结果,所有结果都返回则执行完毕

如果没有返回结果,则使用CounDownLatch类实现

import javautilconcurrentExecutorService;

import javautilconcurrentExecutors;

public class Test {

public static void main(String args[]) throws InterruptedException {

ExecutorService exe = ExecutorsnewFixedThreadPool(50);

for (int i = 1; i <= 5; i++) {

exeexecute(new SubThread(i));

}

exeshutdown();

while (true) {

if (exeisTerminated()) {

Systemoutprintln("结束了!");

break;

}

Threadsleep(200);

}

}

}

import javaawtColor; import javaawtToolkit; import javaxswingImageIcon; import javaxswingJLabel; import javaxswingJOptionPane; import javaxswingJProgressBar; import javaxswingJWindow; @SuppressWarnings("serial") public class Demo extends JWindow implements Runnable { // 定义加载窗口大小 public static final int LOAD_WIDTH = 455; public static final int LOAD_HEIGHT = 295; // 获取屏幕窗口大小 public static final int WIDTH = ToolkitgetDefaultToolkit()getScreenSize()width; public static final int HEIGHT = ToolkitgetDefaultToolkit()getScreenSize()height; // 定义进度条组件 public JProgressBar progressbar; // 定义标签组件 public JLabel label; // 构造函数 public Demo() { // 创建标签,并在标签上放置一张 label = new JLabel(new ImageIcon("images/backgroundjpg")); labelsetBounds(0, 0, LOAD_WIDTH, LOAD_HEIGHT - 15); // 创建进度条 progressbar = new JProgressBar(); // 显示当前进度值信息 progressbarsetStringPainted(true); // 设置进度条边框不显示 progressbarsetBorderPainted(false); // 设置进度条的前景色 progressbarsetForeground(new Color(0, 210, 40)); // 设置进度条的背景色 progressbarsetBackground(new Color(188, 190, 194)); progressbarsetBounds(0, LOAD_HEIGHT - 15, LOAD_WIDTH, 15); // 添加组件 thisadd(label); thisadd(progressbar); // 设置布局为空 thissetLayout(null); // 设置窗口初始位置 thissetLocation((WIDTH - LOAD_WIDTH) / 2, (HEIGHT - LOAD_HEIGHT) / 2); // 设置窗口大小 thissetSize(LOAD_WIDTH, LOAD_HEIGHT); // 设置窗口显示 thissetVisible(true); } public static void main(String[] args) { Demo t = new Demo(); new Thread(t)start(); } @Override public void run() { for (int i = 0; i < 100; i++) { try { Threadsleep(100); } catch (InterruptedException e) { eprintStackTrace(); } progressbarsetValue(i); } JOptionPaneshowMessageDialog(this, "加载完成"); thisdispose(); } }

说下思路,代码自己搞定吧

M+的意思是将当前的数与缓存区中的数相加并将结果存放到缓存区

最初缓存区中的数字默认为0

也就是说当你在按下输入9,再按下M+,就会在缓存区中存入9+0的结果也就是9,然后你又输入10再按下M+,这时候缓存区中就是19。

那么你需要做的就是在你的类中定义一个全局变量假设为a,默认值是0,当按下M+键时,将计算器当前输入的值与a相加,并将结果重新赋值给a;

而M-则是将当前输入的数字与缓冲区中的数字想减,道理跟M+一样,需要注意的是缓冲区中的数字是作为被减数的;

MR意思是读取缓冲区中的数字并显示,也就是说当按下MR时,将全局变量a的值设置到你计算器的文本框中;

MC则是清除缓存区中的数字,也就是将a重新赋值为0。

通过Runnable接口实现run方法,然后通过thread运行3个线程

1、定义Runnble

public class MyRunnable implements Runnable {//实现Runnable接口的run方法

         public void run() {

                   try{

                      Date dt = new Date();//获取当前日期;

                      Threadsleep(1000);//线程休眠1秒钟

                                     Systemoutprintln(dt);//输出日期

                   }catch(Exception e){}

         }

}

2、启动3个线程

 MyRunnable mr = new MyRunnable();

 Thread t1 = new Thread(mr);//定义第一个线程

  //启动

  t1start();//启动第一个线程

 

  Thread t2 = new Thread(mr);//定义第二个线程

  //启动

  t2start();//启动第二个线程

  

   Thread t3 = new Thread(mr);//定义第三个线程

  //启动

  t3start();//启动第三个线程

以上就是关于Java如何判断线程池所有任务是否执行完毕全部的内容,包括:Java如何判断线程池所有任务是否执行完毕、Java 如何判断线程池所有任务是否执行完毕、Java中如何实现进度条效果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10156944.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存