多线程一粒

备注:来自小可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();
	}
}

 多个线程同时做一件事,访问同一个成员变量。

用进度条做显示更鲜明直观哦。

 

 

 

你可能感兴趣的:(多线程)