マルチスレッド1粒
2223 ワード
備考:小可08年の紙ノートから、紙が腐りそうになったので、これをここに写して、時々必要なものだけを用意して、いくつかのコード料理は何時までで、娯楽だけに供します.
複数のスレッドが同時に1つのことをし、同じメンバー変数にアクセスします.
プログレスバーで表示するとより鮮明で直感的ですよ.
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();
}
}
複数のスレッドが同時に1つのことをし、同じメンバー変数にアクセスします.
プログレスバーで表示するとより鮮明で直感的ですよ.