1、实现一个类MyThread继承Thread并重写run()方法
启动线程方法:实例化MyThread对象,并调用start()方法
多个线程之间交替执行(抢时间片)
主线程(main方法)有优先运行的权限,但并不绝对
2、实现一个类MyThread实现Runnable接口下的run()方法
启动线程方法:实例化MyThread对象mt,并将mt作为实例化Thread的参数,再通过Thread对象调用start()方法
MyThread mt = new MyThread();
Thread t = new Thread(mt);
t.start();
实现点击按钮,球向前慢慢滚动的效果:
public class Test extends JFrame{
private MyPanel mp;
public static void main(String[] args) {
new Test().setVisible(true);
}
private JPanel panel;
private JButton btn;
public Test() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
panel = new JPanel();
panel.setLayout(new BorderLayout());
setBounds(300, 100, 600, 300);
this.setContentPane(panel);
mp = new MyPanel();
panel.add(mp);
btn = new JButton("开始");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Thread t = new Thread(mp);
t.start();
}
});
panel.add(btn,BorderLayout.SOUTH);
}
private class MyPanel extends JPanel implements Runnable{
private int x = 100;
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x, 80, 50, 50);
}
@Override
public void run() {
for (int i = 0; i < 50; i++) {
x += 5 ;
try {
Thread.sleep(150);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
}
}
}
}
3、使用匿名类,继承Thread,重