package zad1; import java.awt.EventQueue; import javax.swing.JFrame; import java.awt.GridBagLayout; import javax.swing.JPanel; import java.awt.GridBagConstraints; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.locks.Lock; import javax.swing.JButton; import java.awt.TextArea; //dziala przycisk thread trzeba dodac funkcjonalnosci //dla pozostalych przyciskow. public class Thread_app { int btn1=0,btn2=0,btn3=0,btn4=0; private JFrame frame; TextArea ta; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Thread_app window = new Thread_app(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public Thread_app() { initialize(); } /** * Initialize the contents of the frame. */ //dodac do action listenerow co ma sie stac po kliknieciu private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 450, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.columnWidths = new int[]{0, 0}; gridBagLayout.rowHeights = new int[]{0, 196, 0, 0}; gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE}; gridBagLayout.rowWeights = new double[]{0.0, 1.0, 1.0, Double.MIN_VALUE}; frame.getContentPane().setLayout(gridBagLayout); JButton stop_btn = new JButton("STOP"); GridBagConstraints gbc_stop_btn = new GridBagConstraints(); gbc_stop_btn.insets = new Insets(0, 0, 5, 0); gbc_stop_btn.gridx = 0; gbc_stop_btn.gridy = 0; frame.getContentPane().add(stop_btn, gbc_stop_btn); ta = new TextArea(); GridBagConstraints gbc_textArea = new GridBagConstraints(); gbc_textArea.insets = new Insets(0, 0, 5, 0); gbc_textArea.gridx = 0; gbc_textArea.gridy = 1; frame.getContentPane().add(ta, gbc_textArea); JPanel panel = new JPanel(); GridBagConstraints gbc_panel = new GridBagConstraints(); gbc_panel.fill = GridBagConstraints.BOTH; gbc_panel.gridx = 0; gbc_panel.gridy = 2; frame.getContentPane().add(panel, gbc_panel); JButton thread1_btn = new JButton(" Thread 1"); panel.add(thread1_btn); JButton thread2_btn = new JButton("Thread 2"); panel.add(thread2_btn); JButton thread3_btn = new JButton("Thread 3"); panel.add(thread3_btn); JButton thread4_btn = new JButton("Thread 4"); panel.add(thread4_btn); //action listenery thread1_btn.addActionListener(new ActionListener(){//startowanie theardow @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub if(btn1==0){ taskStart(); thread1_btn.setText("Suspend"); } if(btn1==1){ thread1_btn.setText("Continue"); } if(btn1==2){ thread1_btn.setText("Suspend"); btn1=0; } btn1++; } }); thread2_btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(btn2==0){ taskStart(); thread2_btn.setText("Suspend"); } if(btn2==1){ thread2_btn.setText("Continue"); } if(btn2==2){ thread2_btn.setText("Suspend"); btn2=0; } btn2++; } }); thread3_btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(btn3==0){ taskStart(); thread3_btn.setText("Suspend"); } if(btn3==1){ thread3_btn.setText("Continue"); } if(btn3==2){ thread3_btn.setText("Suspend"); btn3=0; } btn3++; } }); thread4_btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(btn4==0){ taskStart(); thread4_btn.setText("Suspend"); } if(btn4==1){ thread4_btn.setText("Continue"); } if(btn4==2){ thread4_btn.setText("Suspend"); btn4=0; } btn4++; } }); stop_btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) {// zatrzymanie dzialania watkow. // TODO Auto-generated method stub thread1_btn.setText("Continue"); thread3_btn.setText("Continue"); thread4_btn.setText("Continue"); thread2_btn.setText("Continue"); } }); } class SumTask implements Callable { private int taskNum, limit, value; int sum = 0; public SumTask(int taskNum, int limit) { this.taskNum = taskNum; this.limit = limit*taskNum; //losowa wartosc z podanego przedzialu } public Integer call() throws Exception { Random generator = new Random(); while (sum <= limit) { value=generator.nextInt(100*taskNum)+1; if (Thread.currentThread().isInterrupted()) return null; sum=sum+value; ta.append("Thread " + taskNum + " (limit="+limit+"): "+value+", sum="+ sum + '\n'); Thread.sleep(1000);//zmienic na wartosc losowa } //zakonczenie threada ta.append("Thread " + taskNum +" is done."+'\n'); return sum; } }; int k = 0; int n = 1000; Future task; ExecutorService exec = Executors.newFixedThreadPool(4); public void taskStart() { try { task = exec.submit(new SumTask(++k, n)); } catch(RejectedExecutionException exc) { ta.append("Execution rejected\n"); return; } ta.append("Thread " + k + " submitted\n"); } public void taskShutdown() { exec.shutdown(); } public boolean taskDone(){ return task.isDone(); } public void taskShutdownNow() { List awaiting = exec.shutdownNow(); ta.append("Executor shutdown now - awaiting tasks:\n"); for (Runnable r : awaiting) { ta.append(r.getClass().getName()+'\n'); } } }