1. Nachahmung der Warenspitze
1. Erstellen Sie eine MyTask-Klasse
package leaning.demo05;
public class MyTask implements Runnable{
/**
* 设计一个变量,用来表示商品的数量
*/
private static int id=10;
private String username;
public MyTask(String username) {
this.username = username;
}
@Override
public void run() {
String name=Thread.currentThread().getName();
System.out.println(username+"正在使用"+name+"参秒杀任务...");
synchronized (MyTask.class){
if (id>0){
System.out.println(username+"使用"+name+"秒杀:"+id--+"号商品秒杀成功");
}else{
System.out.println(username+"使用"+name+"秒杀:"+"号商品秒杀失败");
}
}
}
}
2. Erstellen Sie die MyTest-Klasse
package leaning.demo05;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class MyTest {
public static void main(String[] args) {
//1.创建一个线程池对象
ThreadPoolExecutor pool=new ThreadPoolExecutor(3,5,1, TimeUnit.SECONDS,new LinkedBlockingDeque<>());
for (int i=1;i<=20;i++) {
MyTask myTask = new MyTask("客户"+i);
pool.submit(myTask);
}
pool.shutdown();
}
}
Ergebnisse der:
2. Imitieren Sie die Bargeldabhebung am Geldautomaten
1. Erstellen Sie eine MyTask-Klasse
package leaning.demo06;
public class MyTask implements Runnable {
//用户名
private String username;
//取款金额
private double money;
//总金额
private static double total=1000;
public MyTask(String username, double money) {
this.username = username;
this.money = money;
}
@Override
public void run() {
String name=Thread.currentThread().getName();
System.out.println(username+"正准备使用"+name+"取款"+money+"元");
try{
Thread.sleep(200);
}catch (InterruptedException e){
e.printStackTrace();
}
synchronized (MyTask.class){
if (total-money>0){
System.out.println(username+"使用"+name+"取款"+money+"元成功:金额"+(total-money));
total-=money;
}else{
System.out.println(username+"使用"+name+"取款"+money+"元失败;金额:"+total);
}
}
}
}
2. Erstellen Sie die MyTest-Klasse
package leaning.demo06;
import leaning.demo06.MyTask;
import java.util.concurrent.*;
public class MyTest {
public static void main(String[] args) {
//1.创建一个线程池对象
ExecutorService pool=Executors.newFixedThreadPool(2, new ThreadFactory() {
int id=1;
@Override
public Thread newThread(Runnable r) {
return new Thread(r,"ATM"+id++);
}
});
for (int i=1;i<=2;i++){
MyTask myTask=new MyTask("客户"+i,800);
pool.submit(myTask);
}
pool.shutdown();
}
}