estou tentando usar ThreadPool para controla-las e finaliza-las de uma vez conforme o codigo abaixo
import java.util.concurrent.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class exemplo extends JFrame{
private static final long serialVersionUID = 1L;
private ExecutorService tpes = null;
private JButton inic = null, para = null;
private JPanel p = null;
private boolean exec = true;
private Runnable r1 = null,r2 = null;
//construtor
exemplo(){
setSize(200,200);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
tpes = Executors.newCachedThreadPool();
inic = new JButton("Iniciar");
inic.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
exec = true;
tpes.execute(r1);
tpes.execute(r2);
}});
para = new JButton("Parar");
para.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
tpes.shutdownNow();
}});
p = new JPanel();
p.add(inic);
p.add(para);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(p,"Center");
setVisible(true);
r1 = new Runnable(){
public void run(){
while(exec){
try{ Thread.sleep(2000);
System.out.println("thread 1");
}catch(Exception rt){
rt.printStackTrace();
exec = false; }
}//while
}//run
};//r1
r2 = new Runnable(){
public void run(){
while(exec){
try{ Thread.sleep(4000);
System.out.println("thread 2");
}catch(Exception rt){
rt.printStackTrace();
exec = false; }
}//while
}//run
};//r1
}//end of constructor
public static void main(String args[]){
new exemplo();
}//end of main
}//end of class
quando eu tento finalizar uma thread, e gerado um erro, mas esse erro esta sendo provocado por mim e é para terminar as threads imediatamente
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at exemplo$3.run(exemplo.java:114)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at exemplo$4.run(exemplo.java:133)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
agora se eu clicar no botao iniciar para fazer as threads rodarem outra vez , da um erro que eu nao sei a causa
Exception in thread "AWT-EventQueue-0" java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.reject(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source)
at exemplo$1.actionPerformed(exemplo.java:41)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
ou seja , so consigo executar o codigo uma vez, alguem pode me ajudar ?