
如果任务是有返回结果的,结合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中如何实现进度条效果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)