【博客搬家】多线程产生随机数问题

/*
* 要求,三个线程来 同时 产生三个随机数,用 一个按钮 来控制开始摇奖和停止摇奖
* 在开始摇奖和停止摇奖之间用 线程的暂停和唤醒 来实现!
*
*
* */

import java. awt.event.*;
import javax.swing.*;
public class FormMain {
    public static void main(String[] args) {
        AFrame frame = new AFrame("摇奖机");
        frame.setLayout(null);
        frame.setSize(400,200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
class AFrame extends JFrame {
    public AFrame(String name) {
        super(name);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        APanel pan = new APanel();
        setContentPane(pan);
    }
}
class APanel extends JPanel {
    private JLabel lblNum1 = new JLabel("0");
    private JLabel lblNum2 = new JLabel("0");
    private JLabel lblNum3 = new JLabel("0");
    private JButton btnStart = new JButton("开始");
    
    private RandomNum rn1 = new RandomNum(lblNum1);
    private RandomNum rn2 = new RandomNum(lblNum2);
    private RandomNum rn3 = new RandomNum(lblNum3);
    
    public APanel() {
        lblNum1.setBounds(50, 50, 20, 20);
        lblNum2.setBounds(100, 50, 20, 20);
        lblNum3.setBounds(150, 50, 20, 20);
        btnStart.setBounds(80,100,100,30);
        
        add(lblNum1);
        add(lblNum2);
        add(lblNum3);
        add(btnStart);
        
        btnStart.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String command=e.getActionCommand();
                if(command.equals("开始")){
                    rn1.startRun();
                    rn2.startRun();
                    rn3.startRun();
                    btnStart.setText("停止");
                }else{
                    rn1.stopRun();
                    rn2.stopRun();
                    rn3.stopRun();
                    btnStart.setText("开始");
                }
            }
        });
    }
}




import javax.swing.*;
public class RandomNum implements Runnable {
    private  volatile boolean  runFlag = false;
    private JLabel lblnum1;
    
    public RandomNum(JLabel lbl) {
        lblnum1 = lbl;
        new Thread (this).start();
    }
    
    public void run() {
        while(true) {
            try {
                Thread .sleep(100);
                if(!runFlag){
                    synchronized(this){
                        this.wait();
                    }
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            int num = (int)((Math.random()*100)%10);
            lblnum1.setText(String.valueOf(num));
        }
    }
    
    public  void startRun() {
        runFlag = true;
        synchronized(this){
            this.notifyAll();
        }
    }
    
    public  void stopRun() {
        runFlag = false;
    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值