1. 程式人生 > >多執行緒的基本實現

多執行緒的基本實現

接著上邊的內容講,我們要嘗試實現一個能讓多個小球同時執行的介面

首先要實現的就是介面的實現,這一步就沒有必要講了。你要是不會,可以去參考我前邊的技術文章。

接著new一個BallListener類繼承MouseAdapter類,目的是在滑鼠點選後畫出一個球。

在畫球前,我們先考慮一下要怎麼實現,我們可以將每個小球的運動作為一個執行緒,也就是每點選一次滑鼠,就會產生一個球,同時產生一個新的執行緒。但這種方法會產生很多執行緒,我們有更好的方法。我們可以建立一個陣列佇列,將球存進陣列佇列中,然後只需要一個執行緒來控制陣列佇列就行了。

我們讓BallListerner實現Runnable類介面

,並且建立陣列佇列。

ArrayList<Ball> al=new ArrayList<Ball>();

在mouseClicked()方法中,我們要例項化一個ball類,該類的作用是控制小球的運動。

public void mouseClicked(MouseEvent e){
       if(g==null) 
           g=(Graphics2D)bg.getGraphics();
       x=e.getX();
       y=e.getY();
       //例項化ball類
       Ball ba=new Ball();
       //將小球的初始位置傳過去
       ba.setY(x,y,g,bg);
       //將小球新增進陣列佇列
       al.add(ba);
 }

之後就是寫好run()方法了

public void run(){
      //要讓小球不斷運動,所以要一直迴圈
      while(true){
          for(int i=0;i<al.size();i++){ 
          //清除小球運動痕跡
          al.get(i).clear();
          //畫一個新的小球
          al.get(i).draw();
          //更新小球的新一組位置
           al.get(i).move();
          }
           try {
                Thread.sleep(20);
           } catch (InterruptedException e1) {
                e1.printStackTrace();
           }
      }
}

別忘了在介面類中加入

BallListener bl=new BallListener(this);
Thread th=new Thread(bl);
th.start();

現在我們已經完成了兩個類了,只剩下ball類。Ball類需要繼承Thread類,通過前邊的程式碼和思路,其實ball類的內容大致出來了。在ball類中,我們要設定球的顏色、球的大小、球的運動方向,

球的運動速度,而這些都是通過隨機數來實現。除此之外,我們還要寫好clear()、draw()、move()方法,在這些方法中,自然是要用上前邊的隨機數。思路基本就是加減那些隨機數,從而來實現不同球的運動。

在clear()方法中,我們會用到

color=bg.getContentPane().getBackground();

這行程式碼,這表示獲取背景色,其實,想要掩蓋已有的小球運動路徑,方法就是用背景色畫球,當然座標要稍微處理一下。

一個能讓多個小球同時執行的介面差不多就實現了。

最後,我提供了原始碼和程式,可以自行下載。

我下篇文章會講小球運動的升級版,我們要實現的是自動產生小球,並且新增一張會動的背景圖。屆時將有三個執行緒(包括主執行緒),因此我還會講到執行緒安全,並且為了介面順暢,會用到雙快取次畫布的知識。