Beispiele für Rohstoffspitzen und -entnahmen

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:
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

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();
    }
}

Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/qq_43078445/article/details/108644290
Empfohlen
Rangfolge