使用线程池ExecutorService创建线程可以通过以下步骤来改造代码:

  1. 创建一个实现Runnable接口的TicketSeller类,重写run()方法。
  2. 在run()方法中使用while循环,条件为ticketCount大于0。
  3. 在while循环内部,使用synchronized关键字来同步访问ticketCount。
  4. 在synchronized块内部,判断ticketCount是否大于0,如果是则卖出一张票并打印相关信息,然后将ticketCount减1。
  5. 在synchronized块外部,使用Thread.sleep()方法模拟卖票过程中的其他操作。
  6. 在main()方法中,创建一个FixedThreadPool线程池,线程数为3。
  7. 使用ExecutorService.submit()方法将TicketSeller实例提交给线程池执行。
  8. 最后,调用ExecutorService.shutdown()方法关闭线程池。

改造后的代码如下:

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

class TicketSeller implements Runnable { private static int ticketCount = 100; // 总票数,假设有100张票

@Override
public void run() {
    while (ticketCount > 0) {
        synchronized (TicketSeller.class) {
            if (ticketCount > 0) {
                System.out.println(Thread.currentThread().getName() + "卖出了第" + ticketCount + "张票");
                ticketCount--;
            }
        }
        try {
            Thread.sleep(100); // 模拟卖票过程中的一些其他操作
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public static void main(String[] args) {
    TicketSeller seller = new TicketSeller();

    ExecutorService executor = Executors.newFixedThreadPool(3);
    executor.submit(seller);
    executor.submit(seller);
    executor.submit(seller);

    executor.shutdown();
}

}

使用线程池ExecutorService创建线程的不同之处在于:

  1. 不再使用Thread类来创建线程,而是使用ExecutorService.submit()方法来提交任务给线程池执行。
  2. 线程池会自动管理线程的创建和销毁,不需要手动创建和启动线程。
  3. 线程池可以重用线程,减少线程创建和销毁的开销,提高性能。
  4. 可以通过调整线程池的大小来控制并发线程的数量。
  5. 使用ExecutorService.shutdown()方法来关闭线程池,确保所有任务执行完毕
将这段代码改造为实现使用线程池ExecutorService创建线程。实现并说明有什么不同。class TicketSeller extends Thread private static int ticketCount = 100; 总票数假设有100张票 Override public void run while tick

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

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