Expand|Select|Wrap|Line Numbers
- package zad31;
- import javax.swing.*;
- import java.awt.event.*;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.*;
- import java.lang.reflect.*;
- public class Exec1 extends JFrame implements ActionListener {
- int k = 0;
- int n = 15;
- JTextArea ta = new JTextArea(40,20);
- List<Future> taskList= new ArrayList<Future>();
- Exec1() {
- add(new JScrollPane(ta));
- JPanel p = new JPanel();
- JButton b = new JButton("Start1");
- b.setActionCommand("Start1");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Start2");
- b.setActionCommand("Start2");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Start3");
- b.setActionCommand("Start3");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Stop1");
- b.setActionCommand("Stop1");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Stop2");
- b.setActionCommand("Stop2");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Stop3");
- b.setActionCommand("Stop3");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Result1");
- b.setActionCommand("Result1");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Result2");
- b.setActionCommand("Result2");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Result3");
- b.setActionCommand("Result3");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("Shutdown");
- b.addActionListener(this);
- p.add(b);
- b = new JButton("ShutdownNow");
- b.addActionListener(this);
- p.add(b);
- add(p, "South");
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- pack();
- setVisible(true);
- }
- public void actionPerformed(ActionEvent e) {
- String cmd = e.getActionCommand();
- try {
- Method m = this.getClass().getDeclaredMethod("task"+cmd);
- m.invoke(this);
- } catch(Exception exc) { exc.printStackTrace(); }
- }
- class SumTask implements Callable<Integer> {
- private int taskNum,
- limit;
- public SumTask(int taskNum, int limit) {
- this.taskNum = taskNum;
- this.limit = limit;
- }
- public Integer call() throws Exception {
- int sum = 0;
- for (int i = 1; i <= limit; i++) {
- if (Thread.currentThread().isInterrupted()) return null;
- sum+=i;
- ta.append("Task " + taskNum + " part result = " + sum + '\n');
- Thread.sleep(1000);
- }
- return sum;
- }
- };
- Future<Integer> task;
- //ExecutorService exec = Executors.newSingleThreadExecutor();
- ExecutorService exec = Executors.newFixedThreadPool(3);
- public void taskStart1() {
- try {
- taskList.add(task);
- task = exec.submit(new SumTask(++k, 15));
- } catch(RejectedExecutionException exc) {
- ta.append("Execution rejected\n");
- return;
- }
- ta.append("Task " + k + " submitted\n");
- }
- public void taskStart2() {
- try {
- taskList.add(task);
- task = exec.submit(new SumTask(++k, 15));
- } catch(RejectedExecutionException exc) {
- ta.append("Execution rejected\n");
- return;
- }
- ta.append("Task " + k + " submitted\n");
- }
- public void taskStart3() {
- try {
- taskList.add(task);
- task = exec.submit(new SumTask(++k, 15));
- } catch(RejectedExecutionException exc) {
- ta.append("Execution rejected\n");
- return;
- }
- ta.append("Task " + k + " submitted\n");
- }
- public void taskResult1() {
- task=taskList.get(0);
- String msg = "";
- if (task.isCancelled()) msg = "Task cancelled.";
- else if (task.isDone()) {
- try {
- msg = "Ready. Result = " + task.get();
- } catch(Exception exc) {
- msg = exc.getMessage();
- }
- }
- else msg = "Task is running or waiting for execution";
- JOptionPane.showMessageDialog(null, msg);
- }
- public void taskResult2() {
- task=taskList.get(1);
- String msg = "";
- if (task.isCancelled()) msg = "Task cancelled.";
- else if (task.isDone()) {
- try {
- msg = "Ready. Result = " + task.get();
- } catch(Exception exc) {
- msg = exc.getMessage();
- }
- }
- else msg = "Task is running or waiting for execution";
- JOptionPane.showMessageDialog(null, msg);
- }
- public void taskResult3() {
- task=taskList.get(2);
- String msg = "";
- if (task.isCancelled()) msg = "Task cancelled.";
- else if (task.isDone()) {
- try {
- msg = "Ready. Result = " + task.get();
- } catch(Exception exc) {
- msg = exc.getMessage();
- }
- }
- else msg = "Task is running or waiting for execution";
- JOptionPane.showMessageDialog(null, msg);
- }
- public void taskStop1() {
- task=taskList.get(0);
- task.cancel(true);
- ta.append("Task 1 stopped.");
- }
- public void taskStop2() {
- task=taskList.get(1);
- task.cancel(true);
- ta.append("Task 2 stopped.");
- }
- public void taskStop3() {
- task=taskList.get(2);
- task.cancel(true);
- ta.append("Task 3 stopped.");
- }
- public void taskShutdown() {
- exec.shutdown();
- ta.append("Executor shutdown\n");
- }
- public void taskShutdownNow() {
- List<Runnable> awaiting = exec.shutdownNow();
- ta.append("Executor shutdown now - awaiting tasks:\n");
- for (Runnable r : awaiting) {
- ta.append(r.getClass().getName()+'\n');
- }
- }
- public static void main(String[] args) {
- new Exec1();
- }
- }