抽奖箱题谈多线程

抽奖箱题谈多线程

题目如下::/*4有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr =

{10,5,20,50,100,200,500,800,2,80,300};

创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下:

抽奖箱1 又产生了一个 10 元大奖

抽奖箱2 又产生了一个 100 元大奖 //…

*/

package t4_prize;
import java.util.Random;

public class t4_prize_test  {

       public static void main(String[] args) {

             WinPrize w=new WinPrize();

             Thread w1=new Thread(w,"抽奖箱1");

             Thread w2=new Thread(w,"抽奖箱2");

             w1.start();

             w2.start();

       }

}

class WinPrize implements Runnable{
       int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
       int n=0;
       public synchronized void makeprize() {

             int length=arr.length-n;

             if (length>0) {

                    Random r=new Random(System.currentTimeMillis());

                    int i=r.nextInt(length);   

                    System.out.print(Thread.currentThread().getName()+"又产生了一个"+arr[i]+"元大奖");                  

                    System.out.println(",共抽奖"+(n+1)+"次");

                    n++;                                    

                    arr[i]=arr[length-1];       

             }

       }

       @Override

       public void run() {

             while(n<=arr.length) {

                    makeprize();

                           try {

                                 Thread.sleep(1000);

                           } catch (InterruptedException e) {

                                 // TODO Auto-generated catch block

                                 e.printStackTrace();

                           }
                    }
             }
       }

第一:代码的随机数取法:

若 需要取length的随机数,(length指的是数组的长度,其中length=11)则代码为:

 Random r=new Random(System.currentTimeMillis());                    
  int i=r.nextInt(length);

System.currentTimeMillis() 获取当前时间,
int i= r.nextInt(length); ----指的是 0-10 ;

若 r.nextInt(10); ---------则指的为0-9 ;

第二:对于数据没有顺序的随机取法,我们将数取出来之后,可将取到的数与最后一个数进行对换,在将数组的长度减一。
             arr[i]=arr[length-1];      //抽到的数与数组最后一位进行互换
第三,两个抽奖人访问一个抽奖箱,即将抽奖箱设置为新的类实现Runnable接口,将两个抽奖人设置为线程对象。
             WinPrize w=new WinPrize();         
             Thread w1=new Thread(w,"抽奖箱1");    
             Thread w2=new Thread(w,"抽奖箱2");     
             w1.start();       
             w2.start();

Thread 的构造方法有:

Thread()
‘’locates a new Thread object.
Thread(Runnable target)
‘’locates a new Thread object.
Thread(Runnable target, String name)
‘’locates a new Thread object.
Thread(String name)
‘’locates a new Thread object.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值