{"title":"Java 多线程快递派发示例:使用Semaphore实现公平分配", "description":"本示例使用Java多线程技术模拟快递派发场景,使用Semaphore保证快递员公平分配快递,并打印每个快递员派发的快递数量。", "keywords":"Java, 多线程, Semaphore, 线程同步, 快递派发, 线程安全", "content":""import java.util.concurrent.Semaphore;\n\npublic class Expresses {\n private static final int NUM_EXPRESSES = 100;\n private static final int NUM_MAILMEN = 3;\n private static final Semaphore semaphore = new Semaphore(1);\n\n public static void main(String[] args) {\n Expresses expresses = new Expresses();\n expresses.startMailmen();\n }\n\n public void startMailmen() {\n Mailman[] mailmen = new Mailman[NUM_MAILMEN];\n for (int i = 0; i < NUM_MAILMEN; i++) {\n mailmen[i] = new Mailman("快递员" + (i+1));\n mailmen[i].start();\n }\n\n for (int i = 0; i < NUM_MAILMEN; i++) {\n try {\n mailmen[i].join();\n } catch (InterruptedException e) {\n e.printStackTrace();\n }\n }\n\n for (int i = 0; i < NUM_MAILMEN; i++) {\n System.out.println(mailmen[i].getName() + "派发了" + mailmen[i].getNumDelivered() + "个快递");\n }\n }\n\n public static class Mailman extends Thread {\n private static int count = 0;\n private int numDelivered = 0;\n\n public Mailman(String name) {\n super(name);\n }\n\n public int getNumDelivered() {\n return numDelivered;\n }\n\n @Override\n public void run() {\n while (count < NUM_EXPRESSES) {\n try {\n semaphore.acquire();\n if (count < NUM_EXPRESSES) {\n count++;\n numDelivered++;\n System.out.println(this.getName() + "派发了第" + count + "个快递");\n }\n } catch (InterruptedException e) {\n e.printStackTrace();\n } finally {\n semaphore.release();\n }\n }\n }\n }\n} "}


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

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