Thread練習
本文閱讀次數:次JAVA Thread
今天看到Android綠豆湯裡在做,多執行緒的練習,想說很久沒有碰java了,所以就跟著他做了一下練習,就是模擬雪下下來的情形,當我們有一個class繼承了Thread,那麼我們override 他的 run 方法 ,就可以用 start 方法去呼叫了,然後他就會自動幫我們排程
主程式
package thereadtest;
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author kwei
*/
public class ThereadTest extends JFrame{
SnowPanel canvas = new SnowPanel();
ThereadTest(){
setSize(850,650);
setLocation(500, 300);
add(canvas);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
}
public class SnowPanel extends JPanel{
// 把所有的雪(snow)加到這裡
ArrayList<Snow> snows = new ArrayList<>();
public SnowPanel() {
setBackground(Color.black);
// 新增所有的雪
for(int i=0; i<100; i++){
Snow snow = new Snow(this);
//丟入執行緒
snow.start();
snows.add(snow);
}
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
for(int i=0; i<100; i++){
Snow sonw = snows.get(i);
// 畫出來
g.setColor(Color.white);
g.fillOval(sonw.x,sonw.y, 10, 10);
}
}
}
public static void main(String[] args) {
new ThereadTest();
}
}
Snow class
package thereadtest;
import java.util.Random;
/**
*
* @author kwei
*/
public class Snow extends Thread{
int x,y;
Random random = new Random();
private ThereadTest.SnowPanel snowPanel;
Snow(ThereadTest.SnowPanel aThis) {
// 要在snowPanel上畫畫
this.snowPanel = aThis;
x=random.nextInt(850);
y=random.nextInt(650);
}
@Override
public void run(){
// 更改雪的位置
while (true) {
y++;
x=x+(random.nextInt(3))-1;
System.out.println("x"+x);
// 在snowPanel 上在畫一次 呼叫paintComponent
snowPanel.repaint();
// 如果到底部,就從頭開始
if(y==650) y=0;
try {
sleep(1);
} catch (Exception e) {
e.getStackTrace();
}
}
}
}