![]()
多线程产生随机数问题
![]() * 要求,三个线程来 同时 * 在开始摇奖和停止摇奖之间用 线程的暂停和唤醒 * * * */ import java. 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 } public void run() { while(true) { try { Thread 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; } } ![]() |
【博客搬家】多线程产生随机数问题
最新推荐文章于 2008-09-28 22:27:00 发布