我仍然是Java的初学者,所以我对线程和并发的了解还很少。但是,由于java.util.Timer和TimerTask存在问题,我希望能够将ScheduledThreadPoolExecutor用作计时器。我对线程的创建非常感兴趣,并且知道我将在几周内学习它们。但是,如果可以的话,有人可以给我一个基本的示例,说明如何使用util.timer将当前的迷你测试程序转换为ScheduledThreadPoolExecutor吗?
我想尽快完成此示例,所以我没有太多时间来学习线程-
无论我想要多少。话虽如此,请包括您对Java初学者而言有关ScheduledThreadPoolExecutor的所有重要内容。
范例程序
我举了一个简短的小例子来说明我在较大程序中遇到的问题。该程序应该做的是允许用户按下按钮来启动计数器。然后,用户必须能够在需要时停止并重新启动计数器。在较大的程序中,此计数器保持相等非常重要,因此我使用了scheduleAtFixRate()方法。同样重要的是初始延迟必须始终相同(在这种情况下为0)。问题(我确定您会看到)是,一旦取消计时器,便无法重新启动-
我希望ScheduledThreadPoolExecutor能解决该问题。
码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.TimerTask;
import java.util.Timer;
public class Tester extends JFrame {
JButton push = new JButton("Push");
static JTextArea textOut = new JTextArea();
Timer timer = new Timer();
boolean pushed = false;
static int i = 1;
public Tester() {
super();
add(push, BorderLayout.NORTH);
add(textOut);
push.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!pushed) {
timer.scheduleAtFixedRate(new Task(), 0, 1000);
pushed = true;
} else {
timer.cancel();
pushed = false;
}
}
});
}
static class Task extends TimerTask {
public void run() {
textOut.setText("" + i++);
}
}
public static void main(String[] args) {
Tester a = new Tester();
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.pack();
a.setVisible(true);
}
}
我经常使用该类进行测试,因此可能会有多余的代码(我想我已经删除了所有代码)。
更换
Timer timer = new Timer();
与
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
和
class Task extends TimerTask
与
class Task implements Runnable
和
timer.scheduleAtFixedRate(new Task(), 0, 1000);
与
service.scheduleAtFixedRate(new Task(), 0, 1000, TimeUnit.MILLISECONDS);
顺便说一句,您不应该尝试在另一个线程上更新GUI。相反,您必须向Swing GUI线程添加任务才能执行任务
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
textOut.setText("" + i++);
}
});
问题内容: 我怎样才能投来? 问题答案: 您必须创建一个新的。
更新:我已经尝试将getCalcMean()和calcMean;我理解这个错误的含义,但我不知道如何修复它,因为最终结果需要是double,我认为java可以计算double和int并得到double。我做错了什么? 我正在计算键入999后的总数平均值,但它一直显示为0,我不知道为什么。 有人能告诉我如何让我的getCalcMean()方法将平均值显示为numTotal/count吗? ---班级
我想把下面的代码转换成Java8s。
最近,我浏览了一些网站,将中缀转换成前缀符号,最后我被卷了起来。 我已经给出了我所做的步骤。。 例:-(1(2*3))(5*6)(7/8) 方法1:-(无需任何算法的手动转换):- 方法2:- 根据现场情况http://scanftree.com/Data_Structure/infix-to-prefix 所以,在这里我完全被绞死了。 请任何人提供以下方面的信息:- 关于我在以上2种方法中哪里出
问题内容: 如何将String 列表转换为数组?以下代码返回错误。 错误: 问题答案: 你要 有关文档,请参见此处,请注意,您也可以以填充已传递数组的方式调用此方法,而不仅仅是使用它来计算要返回的类型。另请注意,也许当您打印阵列时,您更喜欢 因为那将打印实际的元素。
我们正在获取具有以下字段的订单数据(仅显示相关字段) 具有NULLoriginal_orderid的订单可以被认为是父订单 其中一些父母订单可能有子订单,子订单的original_orderid映射到父母的订单。 子顺序可以产生另一个子顺序,如图像所示,带有颜色编码。 与原始文本相同的数据: 作为转换,我们需要将所有子节点映射到它们的原始父节点(original_orderid为NULL),并获得