//: gui/InterruptableLongRunningTask.java // ©2015 MindView LLC: see Copyright.txt // Long-running tasks in threads. import javax.swing.*; import java.awt.*; import java.util.concurrent.*; import static net.mindview.util.SwingConsole.*; class Task implements Runnable { private static int counter = 0; private final int id = counter++; @Override public void run() { System.out.println(this + " started"); try { TimeUnit.SECONDS.sleep(3); } catch(InterruptedException e) { System.out.println(this + " interrupted"); return; } System.out.println(this + " completed"); } @Override public String toString() { return "Task " + id; } public long id() { return id; } }; public class InterruptableLongRunningTask extends JFrame { private JButton b1 = new JButton("Start Long Running Task"), b2 = new JButton("End Long Running Task"); ExecutorService executor = Executors.newSingleThreadExecutor(); public InterruptableLongRunningTask() { b1.addActionListener(e -> { Task task = new Task(); executor.execute(task); System.out.println(task + " added to the queue"); }); b2.addActionListener(e -> { executor.shutdownNow(); // Heavy-handed }); setLayout(new FlowLayout()); add(b1); add(b2); } public static void main(String[] args) { run(new InterruptableLongRunningTask(), 200, 150); } } ///:~