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希望能对大家有所帮助