演示线程对象的生命周期从创建到结束的过程,期间使用new(),start(),sleep(),interrupt()等方法改变线程的状态。
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestStatus extends WindowAdapter implements ActionListener{
Frame f;
static TestStatus.ThreadTest t1,t2;
public static void main(String[] args){
TestStatus w=new TestStatus();
w.display();
t1=w.new ThreadTest("Welcome to java world!");
t2=w.new ThreadTest("Welcome to study thread!");
t2.start();
t2.setButton();//设置按钮状态
}
public void display() {
f=new Frame("Welcome");
f.setSize(200,200);
f.setLocation(200,140);
f.setBackground(Color.lightGray);
f.setLayout(new GridLayout(4,1));
f.addWindowListener(this);
f.setVisible(true);
}
public class ThreadTest extends Thread{
Panel p1;
Label lb1;
TextField tf1,tf2;
Button b1,b2;
int sleeptime=(int)(Math.random()*100);
public ThreadTest(String str){
super(str);
for(int i=0;i<100;i++)
str=str+"";
tf1=new TextField(str);
f.add(tf1);
p1=new Panel();
p1.setLayout(new FlowLayout(FlowLayout.LEFT));
lb1=new Label("sleep");
tf2=new TextField(""+sleeptime);
p1.add(lb1);
p1.add(tf2);
b1=new Button("启动");
b2=new Button("中断");
p1.add(b1);
p1.add(b2);
b1.addActionListener(new TestStatus());
b2.addActionListener(new TestStatus());
f.add(p1);
f.setVisible(true);
}
public void run(){
String str;
while(this.isAlive()&&!this.isInterrupted()){//线程活动且没中断时
try{
str=tf1.getText();
str=str.substring(1)+str.substring(0,1);
tf1.setText(str);
this.sleep(sleeptime);
}catch(InterruptedException e){//中断时抛出
System.out.println(e);
break;//退出循环
}
}
}
public void setButton(){//设置按钮状态
if(this.isAlive()) b1.setEnabled(false);
if(this.isInterrupted()) b2.setEnabled(false);
}
}
public void windowClosing(WindowEvent e){
System.exit(0);
}
public void actionPerformed(ActionEvent e) {//单击按钮时出发
if((e.getSource()==t1.b1)||(e.getSource()==t1.b2))
actionPerformed(e,t1);
if((e.getSource()==t2.b1)||(e.getSource()==t2.b2))
actionPerformed(e,t2);
}
public void actionPerformed(ActionEvent e,ThreadTest t1) {//重载
if(e.getSource()==t1.b1){//启动
t1.sleeptime=Integer.parseInt(t1.tf2.getText());
t1.start();
}
if(e.getSource()==t1.b2){
t1.interrupt();
t1.setButton();//设置按钮状态
}
}
}