Java多线程demo:售票

来源:互联网 发布:python ascii计算 编辑:程序博客网 时间:2024/05/21 11:20
java多线程的简单demo:售票
import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;public class SaleTicket  implements Runnable {private int tickets = 100;                private synchronized   int sale(){          if(tickets > 0){              System.out.println(Thread.currentThread().getName() + "********余票: "+ (tickets)+"张票");              tickets--;           /* try{                  Thread.sleep(50);              }catch(InterruptedException e){                  e.printStackTrace();              }  */        }return tickets+1;      }    private  void TheTicket(int tickets){     try{        Thread.sleep(500);       DateFormat bf = new SimpleDateFormat("yyyy-MM-dd E a HH:mm:ss");      System.out.println(Thread.currentThread().getName()+"**********" +bf.format(new Date())+ "出票成功 !!! 第"+ (tickets)+"张票" );              }catch(InterruptedException e){                  e.printStackTrace();              }      }@Overridepublic void run() {        if(tickets > 0){                           TheTicket(sale());        } else{        System.out.println(Thread.currentThread().getName()+"没票了");        }  }         }
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Test {    public static void main(String[] args) throws Exception  {     int count =160;//买票人数     int taskSize = count <40 ? 5 : 10;       // 创建一个线程池       ExecutorService pool = Executors.newFixedThreadPool(taskSize);     SaleTicket c =new SaleTicket();     for (int i = 0; i < count; i++) {                // 执行任务       pool.submit(c);      }       // 关闭线程池       pool.shutdown();          }}
多线程相当于多个窗口售票,可以提高售票速度,这个简单的小demo希望能对大家有所帮助

原创粉丝点击