一个applet小应用程序,是关于多线程的,希望两个线程交替执行,
写了一个html执行它,但是这个html在命令行用appletviewer运行一切正常,在IE中打开也能看到输出,但只是一个线程被执行一次的结果,为什么呢?!

解决方案 »

  1.   

    //程序代码Sale.java
    //进程同步中的wait()、notify()、notifyall()方法
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    class saler
    {
    int n5=0,n10=0,n20=0;
    String s=null;
    public synchronized void rule(int money)
    {
    if(money==5)
    {
    n5=n5+1;
    s="给您票,您的钱正好";
    Sale.text.append("\n"+s);
    }
    else if(money==20)
    {
    while(n5<3)
    {
    try
    {
    s="对不起,找不开,请等待";
    Sale.text.append("\n"+s);
    wait();
    }
    catch(InterruptedException e)
    {
    }
    }
    n5=n5-3;
    n20=n20+1;
    s="给你票,"+"收您二十元,找您15元";
    Sale.text.append("\n"+s);
    }
    notifyAll();
    }
    }
    public class Sale extends Applet implements Runnable
    {
    saler wang;
    Thread zhang,li;
    static TextArea text;
    public void init()
    {
    zhang=new Thread(this);
    li=new Thread(this);
    text=new TextArea(30,50);
    add(text);
    wang=new saler();
    }
    public void start()
    {
    li.start();
    zhang.start();

    }
    public void run()
    {
    if(Thread.currentThread()==zhang)
    {
    for(int i=1;i<=5;i++)
    wang.rule(20);
    }
    else if(Thread.currentThread()==li)
    {
    text.append("li");
    for(int i=1;i<=15;i++)
    wang.rule(5);
    }
    }
    }//ht.html
    <applet code=Sale.class width=500 height=500>
    </applet>