A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.homework.demo;
class Test extends Thread{
        int num = 100;
         Object lock = new Object();
        public void run(){
                while(true){
                        synchronized(lock){
                        if(num > 0){
                                System.out.println(Thread.currentThread().getName()+"出售编号为"+num+"的票");
                                num--;
                        }
                        }
                }
        }
}
public class HomeWork2 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Test t1 = new Test();
                t1.setName("窗口1");
                t1.start();
                Test t2 = new Test();
                t2.setName("窗口2");
                t2.start();
                Test t3 = new Test();
                t3.setName("窗口3");
                t3.start();
        }

}

4 个回复

倒序浏览
你要控制资源的唯一,就是用类似 单例设计模式,控制对象唯一
  1. package XianChengTest;
  2. /*
  3. * 2、写一个卖票的程序。
  4.        ① 写一个类,该类实现了Runnable接口。有一个私有类型的int型的参数:tickets。票的总数,
  5.        为100,完成run方法,输出结果的格式如下:
  6.        当前窗口为:Thread-2 ,剩余的票数为:19,其中Thread-2为线程的名称。
  7.        ② 开启四个卖票窗口(起四个线程),同时执行卖票的程序。
  8. */
  9. class Piao implements Runnable{
  10.         private int tickets;
  11.         public Piao(int tickets){
  12.                 this.tickets=tickets;
  13.         }
  14.         public int getTickets(){
  15.                 return --tickets;
  16.                
  17.         }
  18.         Object  obj=new Object();
  19.         @Override
  20.         public void run() {
  21.                
  22.                 while (true) {
  23.                         synchronized (obj) {
  24.                                 if (tickets>0) {
  25.                                         System.out.println("当前窗口:"+Thread.currentThread().getName()+"剩余的票数为:"+getTickets());
  26.                                        
  27.                                 }
  28.                                
  29.                         }
  30.                 }
  31.                
  32.         }
  33. }
  34. public class XianCheng {

  35.         public static void main(String[] args) {
  36.                 Piao p=new Piao(100);
  37.                 new Thread(p).start();
  38.                 new Thread(p).start();
  39.                 new Thread(p).start();
  40.                 new Thread(p).start();
  41.                

  42.         }

  43. }
复制代码



回复 使用道具 举报
下面错了,你卖的不是同一个100张票
回复 使用道具 举报
你创建了三个买票的对象,然后开启线程,这不就是在卖300张票吗
回复 使用道具 举报
你创建了三个卖票的对象,总共卖了300张票,肯定有重复的票。用实现Runnable接口的方法创建线程就可以解决了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马