1 . 尝试定义一个继承Thread类的类,并覆盖run()方法,在run()方法中每隔100ms打印一句话。
public class LianXi1 implements Runnable{
/*
定义一个继承Thread类的类,并覆盖run()方法,在run()方法中每隔100ms打印一句话。
*/
int i = 1;
// 1 . 同步方法。
public synchronized void doit(){
if (i <= 5) {
try {
// 2 . 使线程休眠1000ms。
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("这是第" + i++ + "条消息。");
}
}
// 3 . 重写run()方法。
@Override
public void run() {
while (true) {
// 4 . 在run()方法中调用同步方法。
doit();
}
}
public static void main(String[] args) {
// 5 . 实例化对象。
LianXi1 lx1 = new LianXi1();
// 6 . 以该类对象分别实例化2个进程。
Thread Ta = new Thread(lx1);
Thread Tb = new Thread(lx1);
// 7 . 启动线程。
Ta.start();
Tb.start();
}
}
2 . 尝试开发一个窗体,在窗体中设计一个进度条,使进度条每次递增滚动。
import javax.swing.*;
import java.awt.*;
public class LianXi2 extends JFrame {
/*
尝试开发一个窗体,在窗体中设计一个进度条,使进度条每次递增滚动。
*/
// 1 . 定义一个线程。
private Thread thread;
// 2 . 定义一个进度条组件。
final JProgressBar jProgressBar = new JProgressBar();
public LianXi2(){
//super();
// 3 . 设置进度条位置在正中央。
getContentPane().add(jProgressBar, BorderLayout.CENTER);
// 4 . 设置进度条显示数字字符。
jProgressBar.setStringPainted(true);
// 5 . 使用匿名内部类形式初始化Thread实例。
thread = new Thread(new Runnable() {
int count = 0;
// 6 . 重写run()方法。
@Override
public void run() {
while(true){
// 7 . 设置进度条的当前值。
jProgressBar.setValue(++count);
try{
// 8 . 使线程休眠100ms。
Thread.sleep(100);
}catch (Exception e){
e.printStackTrace();
}
}
}
});
// 9 . 启动该线程。
thread.start();
}
public static void main(String[] args) {
init(new LianXi2(),100,100);
}
// 10 . 设置窗体各种属性的方法。
public static void init(JFrame frame,int width,int height){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setVisible(true);
}
}