最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java多線程編程實(shí)現(xiàn)下雪效果

 更新時(shí)間:2015年11月22日 14:45:22   投稿:hebedich  
這篇文章主要介紹了java多線程編程實(shí)現(xiàn)下雪效果的相關(guān)資料,需要的朋友可以參考下

沒(méi)有直接采用繼承Thread類或者繼承Runnable的接口來(lái)實(shí)現(xiàn)多線程,而是使用了匿名內(nèi)部類。

要導(dǎo)入的類:

 import javax.swing.*;
 import java.awt.*;

1.定義SowPanel類,繼承JPanel類,這個(gè)類有兩個(gè)整型數(shù)組成員,用來(lái)保存雪花起始位置。在構(gòu)造函數(shù)中為數(shù)組賦初值;重寫(xiě)父類的paint()方法;定義一個(gè)啟動(dòng)多線程的startSnow()方法。

class SnowPanel extends JPanel
{
  //定義整型數(shù)組,存儲(chǔ)雪花坐標(biāo)
  private int[] x=new int[300];
  private int[] y=new int[300];

  public SnowPanel()
  {
    //設(shè)置背景為黑色
    setBackground(Color.black);
    //用隨機(jī)數(shù)初始化雪花坐標(biāo)
    for(int i=0;i<x.length;i++)
    {
      x[i]=(int)(Math.random()*800);
      y[i]=(int)(Math.random()*600);
    }
  }
  
  public void paint(Graphics g)
  {
    //繼承父類畫(huà)的方法
    super.paint(g);
    //設(shè)置顏色為白色
    g.setColor(Color.white);
    //利用循環(huán)畫(huà)出多個(gè)雪花
    for(int i=0;i<x.length;i++)
    {
      g.drawString("*",x[i],y[i]);
    }
  }
  //定義一個(gè)方法啟動(dòng)多線程,并使用匿名內(nèi)部類
  public void startSnow()
  {
    new Thread()
    {
      public void run()
      {
        while(true)
        {
          for(int i=0;i<y.length;i++)
          {
            //坐標(biāo)下移
            y[i]++;
            //檢查是否越界
            if(y[i]==600)
            y[i]=0;
            //重繪
            repaint();
          }
          
           try
           {
            Thread.sleep(10);
           }
             catch (InterruptedException e)
           {
            e.printStackTrace();
           }
        }
      }
    }.start();
  }
}

2.定義ShowFrame類,繼承Jframe 類。在構(gòu)造方法中設(shè)置窗口的顯示屬性,并創(chuàng)建ShowPanel對(duì)象,添加到窗口中。

 class SnowPanel extends JPanel
 {
   //定義整型數(shù)組,存儲(chǔ)雪花坐標(biāo)
   private int[] x=new int[300];
   private int[] y=new int[300];
 
   public SnowPanel()
   {
     //設(shè)置背景為黑色
     setBackground(Color.black);
     //用隨機(jī)數(shù)初始化雪花坐標(biāo)
     for(int i=0;i<x.length;i++)
     {
       x[i]=(int)(Math.random()*800);
       y[i]=(int)(Math.random()*600);
     }
   }
   
   public void paint(Graphics g)
   {
     //繼承父類畫(huà)的方法
     super.paint(g);
     //設(shè)置顏色為白色
     g.setColor(Color.white);
     //利用循環(huán)畫(huà)出多個(gè)雪花
     for(int i=0;i<x.length;i++)
     {
       g.drawString("*",x[i],y[i]);
     }
   }
   //定義一個(gè)方法啟動(dòng)多線程,并使用匿名內(nèi)部類
   public void startSnow()
   {
     new Thread()
     {
       public void run()
       {
         while(true)
         {
           for(int i=0;i<y.length;i++)
           {
             //坐標(biāo)下移
             y[i]++;
             //檢查是否越界
             if(y[i]==600)
             y[i]=0;
             //重繪
             repaint();
           }
           
           try
           {
             Thread.sleep(10);
           }
             catch (InterruptedException e)
           {
             e.printStackTrace();
           }
         }
       }
     }.start();
   }
 }

3.運(yùn)行效果圖片(此為靜態(tài)圖):

疑問(wèn):發(fā)現(xiàn)其他的不改變,繼承Frame、Panel和繼承JFrame、Jpanel的運(yùn)行效果是不同的,前者顯示的下雪場(chǎng)景總是有閃爍的感覺(jué);后者則沒(méi)有閃爍,個(gè)人感覺(jué)后者效果更好些。

接下來(lái)我們來(lái)看個(gè)例子

這里我們做一個(gè)完整的例子來(lái)說(shuō)明線程產(chǎn)生的方式不同而生成的線程的區(qū)別:

package debug;

import java.io.*;
import java.lang.Thread;


class MyThread extends Thread{
 public int x = 0;

 public void run(){
  System.out.println(++x);
 }
}

class R implements Runnable{
 private int x = 0;
 public void run(){
  System.out.println(++x);
 }
}

public class Test {
 public static void main(String[] args) throws Exception{
  
  for(int i=0;i<10;i++){
   Thread t = new MyThread();
   t.start();
  }
  Thread.sleep(10000);//讓上面的線程運(yùn)行完成
  R r = new R();
  for(int i=0;i<10;i++){
   Thread t = new Thread(r);
   t.start();
  }
 }
}

  上面10個(gè)線程對(duì)象產(chǎn)生的10個(gè)線程運(yùn)行時(shí)打印了10次1。下面10個(gè)線程對(duì)象產(chǎn)生的10個(gè)線程運(yùn)行時(shí)打印了1到10。我們把下面的10個(gè)線程稱為同一實(shí)例(Runnable實(shí)例)的多個(gè)線程。

相關(guān)文章

  • Spring中的構(gòu)造注入

    Spring中的構(gòu)造注入

    這篇文章主要介紹了Spring中的構(gòu)造注入,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring5中SpringWebContext方法過(guò)時(shí)的解決方案

    Spring5中SpringWebContext方法過(guò)時(shí)的解決方案

    這篇文章主要介紹了Spring5中SpringWebContext方法過(guò)時(shí)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot讀取yaml文件操作詳解

    SpringBoot讀取yaml文件操作詳解

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語(yǔ)言)的遞歸縮寫(xiě)。在開(kāi)發(fā)的這種語(yǔ)言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語(yǔ)言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • springboot集成redis實(shí)現(xiàn)簡(jiǎn)單秒殺系統(tǒng)

    springboot集成redis實(shí)現(xiàn)簡(jiǎn)單秒殺系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了springboot集成redis實(shí)現(xiàn)簡(jiǎn)單秒殺系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 淺析Java中ConcurrentHashMap的存儲(chǔ)流程

    淺析Java中ConcurrentHashMap的存儲(chǔ)流程

    ConcurrentHashMap技術(shù)在互聯(lián)網(wǎng)技術(shù)使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在ConcurrentHashMap技術(shù)的使用和原理方面對(duì)小伙伴們進(jìn)行360°的刁難,本文詳細(xì)給大家介紹一下ConcurrentHashMap的存儲(chǔ)流程,需要的朋友可以參考下
    2023-05-05
  • 使用logback實(shí)現(xiàn)按自己的需求打印日志到自定義的文件里

    使用logback實(shí)現(xiàn)按自己的需求打印日志到自定義的文件里

    這篇文章主要介紹了使用logback實(shí)現(xiàn)按自己的需求打印日志到自定義的文件里,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 淺談Java源碼ConcurrentHashMap

    淺談Java源碼ConcurrentHashMap

    最近剛?cè)腴T(mén)java,覺(jué)得看源碼挺有意思的,就記錄一下一些常用類的源碼吧,從而能夠總結(jié)一些使用細(xì)節(jié).本文對(duì)源碼ConcurrentHashMap介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • mybatis如何實(shí)現(xiàn)saveOrUpdate

    mybatis如何實(shí)現(xiàn)saveOrUpdate

    這篇文章主要介紹了mybatis如何實(shí)現(xiàn)saveOrUpdate問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java國(guó)密加密SM2代碼詳細(xì)使用步驟

    Java國(guó)密加密SM2代碼詳細(xì)使用步驟

    SM2算法可以用較少的計(jì)算能力提供比RSA算法更高的安全強(qiáng)度,而所需的密鑰長(zhǎng)度卻遠(yuǎn)比RSA算法低,下面這篇文章主要給大家介紹了關(guān)于Java國(guó)密加密SM2代碼的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Java如何把數(shù)組轉(zhuǎn)換為ArrayList

    Java如何把數(shù)組轉(zhuǎn)換為ArrayList

    這篇文章主要介紹了Java如何把數(shù)組轉(zhuǎn)換為ArrayList,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

孝义市| 凉城县| 山阴县| 兴仁县| 孟村| 苏尼特左旗| 泰安市| 筠连县| 庆阳市| 察哈| 东乌| 赤水市| 平江县| 金华市| 三河市| 永宁县| 美姑县| 上饶市| 磴口县| 乃东县| 西峡县| 房产| 舟曲县| 同德县| 湖口县| 香港| 固原市| 犍为县| 多伦县| 柳州市| 临猗县| 漯河市| 镇坪县| 辽中县| 大足县| 吕梁市| 桓台县| 横山县| 秦皇岛市| 元谋县| 遂昌县|