public class Xiti { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个窗口
TicketWindow tw1=new TicketWindow();
//TicketWindow tw2=new TicketWindow();
//TicketWindow tw3=new TicketWindow();
//使用三个线程同时启动
Thread t1=new Thread(tw1);
Thread t2=new Thread(tw1);
Thread t3=new Thread(tw1);
t1.start();
t2.start();
t3.start();
}}
//售票窗口类
class TicketWindow implements Runnable
{
//一共两千张
private int nums=2000; @Override
public void run() {
// TODO Auto-generated method stub
while(true)
{
//认为if else 要保证其原子性[同步代码块]
synchronized(this)
{


if(nums>0)
{
//Thread.currentThread().getName() 表示当前线程的名字
System.out.println
(Thread.currentThread().getName()+"现在售出第"+nums+"张票");
//休眠时间
try{
Thread.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
nums--;
}else{
break;
}
}
}

       
}
}
Thread-0现在售出第2000张票
Thread-0现在售出第1999张票
Thread-2现在售出第1998张票
Thread-2现在售出第1997张票
Thread-2现在售出第1996张票
Thread-2现在售出第1995张票
以上是测试结果
我想的结果应该是
Thread-0现在售出第2000张票
Thread-1现在售出第1999张票
Thread-2现在售出第1998张票
Thread-0现在售出第1997张票
Thread-1现在售出第1996张票
Thread-2现在售出第1995张票
无限循环
求帮忙

解决方案 »

  1.   


    import java.util.List;public class ProcessCall { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    // 创建一个窗口
    // TicketWindow tw2=new TicketWindow();
    // TicketWindow tw3=new TicketWindow();
    // 使用三个线程同时启动
    Thread t1 = new TicketWindow();
    Thread t2 = new TicketWindow();
    Thread t3 = new TicketWindow();
    t1.setPriority(4);
    t2.setPriority(3);
    t3.setPriority(2);
    TicketWindow.joinGroup(t1);
    TicketWindow.joinGroup(t2);
    TicketWindow.joinGroup(t3);
    t1.start();
    t2.start();
    t3.start();
    }}// 售票窗口类
    class TicketWindow extends Thread{
    // 一共两千张
    static List<Thread> list = null;
    public TicketWindow(){
    list = new ArrayList<Thread>();
    }
    public static void joinGroup(Thread t){
    list.add(t);
    }

    private int nums = 2000; @Override
    public void run() {
    // TODO Auto-generated method stub
    while (true) {
    // 认为if else 要保证其原子性[同步代码块]
    synchronized (this) {
    if (nums > 0) {
    // Thread.currentThread().getName() 表示当前线程的名字
    System.out.println(Thread.currentThread().getName()
    + "现在售出第" + nums + "张票");
    // 休眠时间
    try {
    Thread.sleep(2000);
    for(Thread t:list){
    if(t!=this){
    t.setPriority((t.getPriority()+1));
    }
    else{
    this.setPriority(this.getPriority()-list.size()+1);
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    nums--;
    } else {

    break;
    }
    }
    } }
    }