备注:来自小可08年的纸笔记,因为纸张快烂了,故此誊抄于此,以备不时只需,有的代码菜到几点,仅供娱乐。
package nie.test.util.thread;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class TestJProgressBar {
static long begin,end;
JProgressBar bar = new JProgressBar(JProgressBar.HORIZONTAL ,0,1000);
public TestJProgressBar() {
JFrame frame = new JFrame("progress_bar_show");
bar.setStringPainted(true); //1.设置字符串可涂改
bar.setString("0%"); //2.初始化显示
bar.setValue(0); //3.初始化的值
frame.add(bar,BorderLayout.CENTER);
frame.setBounds(400, 500, 400, 150);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Progress p1 = new Progress();
begin = System.currentTimeMillis();
/*
i=1 -> 线程:Thread_0:49.636
i=10 -> 平均5秒。
线程:Thread_7:5.124
线程:Thread_5:5.14
线程:Thread_3:5.155
线程:Thread_2:5.171
线程:Thread_9:5.171
线程:Thread_1:5.171
线程:Thread_8:5.171
线程:Thread_4:5.202
线程:Thread_6:5.202
线程:Thread_0:5.218
*/
for(int i=0;i<10;i++){
Thread t=new Thread(p1);
t.setName("Thread_"+i);
t.start();
}
}
class Progress implements Runnable{
int i=0;
@Override
public void run() {
while(i<=1000) {
try {
Thread.sleep((int)(Math.random()*100));
bar.setString(i+"‰");
if(i==1000){
end = System.currentTimeMillis();
break;
}
bar.setValue(i++);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("线程:"+Thread.currentThread().getName()+":"+(end-begin)/1000.0);
}
}
public static void main(String[] args) {
new TestJProgressBar();
}
}
多个线程同时做一件事,访问同一个成员变量。
用进度条做显示更鲜明直观哦。