Ho rifatto un po l'interfaccia grafica, la classe Mythread estende Thread e si limita a stampare il messaggio "Thread n" se il thread è l'n-esimo creato, quindi dorme un secondo e ritorna a stampare in un ciclo continuo.

I pulsanti disponibili sono:

new: crea un nuovo MyThread inserendolo nella JComboBox;
start: fa partire il Thread correntemete selezionato nella JComboBox;
interrupt: interrompe il Thread correntemente selezionato e lo elimina dalla JComboBox;
sleep: fa dormire il thread per 10 secondi ancizche per 1 secondo

Non so perchè ma non sono riuscito a terminare il thread invocandone il metodo interrupt; per ora ho ridefinito il metodo interrupt che setta una variabile booleana in modo da interrompere il cilo infinito.

Oltre ai pulsanti gli stessi comandi sono disponibili in un menu.

La classe principale che devi lanciare è ThreadExercise:

file ThreadExercise.java:

Codice PHP:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.util.*;
import javax.swing.border.*;


class 
MyThread extends Thread{

    private static 
int MyThreadId 0;
    private 
int id;
    private 
String message;
    private 
JTextArea area;
    private 
boolean goOntrue;
    private 
boolean sleep false;
    
    public 
MyThread(String messageJTextArea area){
        
id MyThreadId;
        
MyThreadId++;
        
this.message message;
        
this.area area;
    }
    
    public 
void run(){
        for(;
goOn != false; ){
            
System.out.println("Thread " id);
            
area.append("Thread " id "\n");
            
int pos area.getDocument().getLength();
            try{
                  
area.setCaretPosition(pos);
            }
            catch(
IllegalArgumentException exc){
            }
            
            try{
                if(! 
sleep)
                    
sleep(2000);
                 else{
                     
sleep(10000);
                     
sleep false;
                 }
            }
            catch(
InterruptedException ex){
            
            }
        }
    }
    
    public 
void interrupt(){
        
goOn false;
    }
    
    public 
void sleep(){
        
sleep true;
    }
    
    public 
String toString(){
        return 
"Thread " id;
    }

}


class 
ThreadFrame extends JFrame implements ActionListener{
    
    private 
JLabel currentThreadLabel;
    private 
JLabel lastActionLabel;
    
    private 
JButton newButton;
    private 
JButton startButton;
    private 
JButton interruptButton;
    private 
JButton sleepButton;
    
    private 
Action newAction;
    private 
Action startAction;
    private 
Action interruptAction;
    private 
Action sleepAction;
    
    private 
JComboBox threadList;
    
    private 
JTextArea messagesArea;
    
    private 
JToolBar toolbar;
    
    private 
JPanel statusBar;
    
    public 
ThreadFrame(){
        
addWindowListener(new WindowAdapter(){
            public 
void windowClosing(WindowEvent e){
                
System.exit(0);
            }
        });

        
threadList = new JComboBox();
        
threadList.addActionListener(this);
        
threadList.setEditable(false);

        
createActions();
        
createButtons();
        
createToolbar();
        
createStatusBar();
        
createMenu();
        
        
messagesArea = new JTextArea();
        
messagesArea.setEditable(false);
        
messagesArea.setBackground(Color.BLACK);
        
messagesArea.setForeground(Color.WHITE);
        
getContentPane().add(new JScrollPane(messagesArea), "Center");
        
        
setTitle("Esercizio sui Thread");
        
setSize(450450);
        
getContentPane().add(toolbar"North");
        
        
getContentPane().add(statusBar"South");

        
show();
    }
    
    private 
void createActions(){
        
newAction = new AbstractAction("new"){
            public 
void actionPerformed(ActionEvent e){
                
MyThread thread = new MyThread(""messagesArea);
                
threadList.addItem(thread);
                
threadList.setSelectedItem(thread);
                
lastActionLabel.setText("Created " thread);
            }
        };
        
        
startAction = new AbstractAction("start"){
            public 
void actionPerformed(ActionEvent e){
                
Object o threadList.getSelectedItem(); 
                if(
== null
                return; 
                
Thread selectedThread = (Thread)o
                try{
                    
selectedThread.start();
                }
                catch(
Exception exx){
                    
String s selectedThread " cannot be started: ";
                    
messagesArea.append(exx "\n");
                }
                
lastActionLabel.setText("Started " selectedThread);
            }
        };
        
        
interruptAction = new AbstractAction("interrupt"){
            public 
void actionPerformed(ActionEvent e){
                
Object o threadList.getSelectedItem();
                if(
== null
                    return; 
                
threadList.removeItem(o);
                
Thread selectedThread = (Thread)o
                
selectedThread.interrupt();
                
lastActionLabel.setText("Interrupted " selectedThread);
            }
        };
        
        
sleepAction = new AbstractAction("sleep"){
            public 
void actionPerformed(ActionEvent e){
                
Object o threadList.getSelectedItem(); 
                if(
== null
                    return; 
                
MyThread selectedThread = (MyThread)o
                
selectedThread.sleep();
                
lastActionLabel.setText("Sleeping " selectedThread);
            }
        };
    }

    private 
void createButtons(){
        
newButton = new JButton(newAction);
        
startButton = new JButton(startAction);
        
interruptButton = new JButton(interruptAction);
        
sleepButton = new JButton(sleepAction);
    }
    
    private 
void createToolbar(){
        
toolbar = new JToolBar();
        
toolbar.setRollover(true);
        
toolbar.add(newButton);
        
toolbar.add(startButton);
        
toolbar.add(interruptButton);
        
toolbar.add(sleepButton);
    }
    
    private 
void createStatusBar(){
        
currentThreadLabel = new JLabel("No Thread selected");
        
lastActionLabel = new JLabel("No action performed");;
        
statusBar = new JPanel(new GridLayout(131010));
        
statusBar.add(currentThreadLabel);
        
statusBar.add(threadList);
        
statusBar.add(lastActionLabel);
        
Border border BorderFactory.createEmptyBorder(5555);
        
statusBar.setBorder(border);
    }
    
    private 
void createMenu(){
        
JMenuBar menubar = new JMenuBar();
        
JMenu actionsMenu = new JMenu("Actions");
        
menubar.add(actionsMenu);        
        
actionsMenu.add(newAction);
        
actionsMenu.add(startAction);
        
actionsMenu.add(interruptAction);
        
actionsMenu.add(sleepAction);
        
setJMenuBar(menubar);
    }
    
    public 
void actionPerformed(ActionEvent e){
        
Object o threadList.getSelectedItem();
        if(
== null){
            
currentThreadLabel.setText("No Thread Selected");
            return;
        }
        
String s "Selected ";
        
threadList.getSelectedItem().toString();
        
currentThreadLabel.setText(s);
    }
}


class 
ThreadExercise{
    
    public static 
void main(String[] args){
        new 
ThreadFrame();
    }