多线程
进程是资源分配的最小单位
线程是cpu调度的最小单位
1、继承Thread
创建: A extends Thread
在A中实现run()
启动:利用继承自Thread 的strart() 方法
A a = new A();
a.start();
2、实现Runnable接口
创建: A implements Runnable
在A中实现run()
启动: 以A的对象为Thread的构造函数的参数创建Thread对象
并且利用它的start()方法调度启动线程
A a = new A();
Thread b = new Thread(a);
b.start();
3、利用Timer TimerTask
创建:创建TimerTask的子类,并实现run()方法得到时钟器任务类
MyTimerTask extends TimerTask{
public void run(){
}
}
启动:创建时钟器Timer对象
利用时钟器对象的schedule()方法启动线程任务
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), ....,...);
//动画效果
import java.awt.Container;
import javax.swing.*;
public class Animation extends JFrame implements Runnable{
JLabel jlb = null;
int frame = 0;
ImageIcon[] img = new ImageIcon[7];
public Animation(){
super("豹子");
for(int i=0; i<img.length; i++){
img[i] = new ImageIcon("src/res/card" + i + ".png");
}
jlb = new JLabel(img[0]);
Container c = this.getContentPane();
add(jlb);
new Thread(this).start();
this.setSize(500,600);
this.setVisible(true);
}
public void run(){
while(true){
jlb.setIcon(img[++frame%7]);
try{
Thread.sleep(100);
}catch(InterruptedException ie){
ie.printStackTrace();
}
}
}
public static void main(String[] args) {
new Animation();
}
}
//文字滚动
import java.awt.*;
import java.util.TimerTask;
import javax.swing.*;
public class hbsi extends JFrame{
JLabel lb = new JLabel("河北软件职业技术学院",JLabel.CENTER);
public hbsi(){
super("滚动");
this.add(lb);
this.setSize(350,300);
this.setLocation(450,300);
this.setVisible(true);
new TextScroll_1(lb).start();
}
public static void main(String[] args) {
new hbsi();
}
class TextScroll_1 extends Thread{
JLabel lb ;
public TextScroll_1(JLabel _lb){
lb = _lb;
}
public void run(){
String str = lb.getText();
while(true){
try{
str = str.substring(1)+str.substring(0,1);
lb.setText(str);
Thread.sleep(200);
}catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
}
}