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;
/**
* Launch the application.
*/
public static void main
(String[] args
) {
public void run() {
try {
Thread_app window = new Thread_app();
window.frame.setVisible(true);
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.setBounds(100, 100, 450, 300);
frame.
setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE);
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);
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);
gbc_textArea.
insets = new Insets(0,
0,
5,
0);
gbc_textArea.gridx = 0;
gbc_textArea.gridy = 1;
frame.getContentPane().add(ta, gbc_textArea);
gbc_panel.gridx = 0;
gbc_panel.gridy = 2;
frame.getContentPane().add(panel, gbc_panel);
panel.add(thread1_btn);
panel.add(thread2_btn);
panel.add(thread3_btn);
panel.add(thread4_btn);
//action listenery
thread1_btn.
addActionListener(new ActionListener(){//startowanie theardow
@Override
// 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++;
}
});
@Override
// 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++;
}
});
@Override
// 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++;
}
});
@Override
// 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++;
}
});
@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<Integer> {
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
}
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<Integer> 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<Runnable> awaiting = exec.shutdownNow();
ta.append("Executor shutdown now - awaiting tasks:\n");
ta.append(r.getClass().getName()+'\n');
}
}
}