今天在教材上抄了一道例题:
public class testjava1
{
public static void main(String[] args)
{
Threadtest t=new Threadtest();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();

}
}class Threadtest implements Runnable
{
private int ticket=20;
public void run()
{
while(true)
{
if (ticket>0)
System.out.println(Thread.currentThread().getName()+"售出了"ticket--);
}
}
}
运行后的结果是:
Thread-0售出了20
Thread-0售出了19
Thread-0售出了18
Thread-0售出了17
Thread-0售出了16
Thread-0售出了15
Thread-0售出了14
Thread-0售出了13
Thread-0售出了12
Thread-0售出了11
Thread-0售出了10
Thread-0售出了9
Thread-0售出了8
Thread-0售出了7
Thread-0售出了6
Thread-0售出了5
Thread-0售出了4
Thread-0售出了3
Thread-0售出了2
Thread-0售出了1
为什么只有一个线程在工作,而且执行这个程序一次以后,就无法再继续执行了,机器像死机一样。

解决方案 »

  1.   

    这个例子好烂。现在普通配置的计算机,执行20次输出,根本用不完一个时间片,所以,第一个时间片还没用完,输出就结束了。其他线程启动的时候,ticket变量是0,所以不会再有任何输出,而是在一个死循环内无休止地进行if(ticket>0)这个条件判断。循环永不中止,而20次输出以后也永远不会有输出。
      

  2.   

    我替你改了一下,你可以试试,看这样是否有“多线程的效果”,呵呵:
    public class ThreadTest implements Runnable {

    private int ticket = 20; public void run() {
    while(ticket > 0) {
    System.out.println(Thread.currentThread().getName() + "售出了" + ticket--);
    Thread.yield();
    }
    } public static void main(String[] args) {
    ThreadTest t = new ThreadTest();
    new Thread(t).start();
    new Thread(t).start();
    new Thread(t).start();
    new Thread(t).start();
    }}
      

  3.   

    机器太快了,或者太慢了!哈哈!!public class TestJava1 {
      public static void main(String[] args) {
        Threadtest t = new Threadtest();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
      }
    }class Threadtest implements Runnable {
      private int ticket = 20;  public void run() {
        while (ticket>0) {
          try {
            Thread.yield();//sleep(1);
          } catch (Exception e) {      
            e.printStackTrace();
          }
          if (ticket > 0)
            System.out.println(Thread.currentThread().getName() + "售出了" + ticket--);
        }
      }
    }
      

  4.   

    或者 这里改一下
    while(true) 

    if   (ticket> 0) 
    System.out.println(Thread.currentThread().getName()+"售出了"ticket--); 
    } 改成如下
    while(true) 

    if   (ticket> 0) 
    System.out.println(Thread.currentThread().getName()+"售出了"ticket--); try
    {
    Thread.sleep(10);
    }
    catch(Exception e)
    {
    }
      

  5.   

    while(true) 了,你没让它出来阿