您的位置:首页 > 编程语言 > Java开发

Java多线程demo:售票

2017-10-10 09:05 225 查看
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();
}
}
@Override
public 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希望能对大家有所帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: