以下是使用Java的juc包中的FixedThreadPool实现的模拟买票的代码,并利用synchronized关键字保证线程的安全性:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TicketCounter {
    private int availableTickets = 100; // 假设一共有100张票

    public synchronized void sellTicket(int num) {
        if (availableTickets >= num) {
            availableTickets -= num;
            System.out.println(Thread.currentThread().getName() + " 卖出 " + num + " 张票,剩余 " + availableTickets + " 张票");
        } else {
            System.out.println(Thread.currentThread().getName() + " 剩余票数不足,无法卖出");
        }
    }

    public static void main(String[] args) {
        TicketCounter ticketCounter = new TicketCounter();
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        for (int i = 0; i < 10; i++) {
            executorService.execute(() -> {
                ticketCounter.sellTicket(1);
            });
        }

        executorService.shutdown();
    }
}

在上述代码中,我们创建了一个TicketCounter类,它有一个availableTickets变量表示剩余的票数。sellTicket方法使用synchronized关键字修饰,以保证在同一时刻只有一个线程可以访问该方法。如果剩余票数足够,线程会卖出指定数量的票,并输出剩余的票数;否则输出剩余票数不足的提示。

在main方法中,我们创建了一个FixedThreadPool,容量为3,然后循环提交10个任务,每个任务调用TicketCounter的sellTicket方法卖出1张票。最后调用executorService的shutdown方法关闭线程池。

这样,通过使用FixedThreadPool和synchronized关键字,我们实现了多线程模拟买票,并保证了线程的安全性

请用Java的juc包的FixedThreadPool写一段模拟买票的代码并且利用synchronized 关键字保证线程的安全性

原文地址: https://www.cveoy.top/t/topic/iwQB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录