วันนี้เพื่อนถามคำถามสัมภาษณ์ มี 5 คนที่คว้าซองสีแดง 5 ซอง พวกเขาสามารถคว้าและนำไปใช้ซ้ำ ๆ โดยใช้โปรแกรมมัลติเธรด มีหลายวิธีในการใช้งาน ฉันต้องการแบ่งปันความคิดของฉัน: มีการใช้คุณสมบัติของการปิดกั้นคิว
/*** สร้างโดย Zhanglinqiang เมื่อปี 2016/6/23 */ คลาสสาธารณะ mytest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น InterruptedException {LinkedBlockingQueue <Luckymoney> Luckymoneys = ใหม่ LinkedBlockingQueue <> (); รายการ <FutureTask> futureTasks = new ArrayList <> (); // เตรียมที่จะคว้าซองจดหมายสีแดงสำหรับ (int i = 0; i <5; i ++) {FutureTask <Ojrop> FutureTask = New FutureTask <> (ใหม่ CatchLuckMoney (Luckymoneys, "Name"+i), Null); เธรดใหม่ (FutureTask, "Name"+i). start (); FutureTasks.add (FutureTask); } thread.sleep (5); // ตรวจสอบให้แน่ใจว่าเธรดของการคว้าซองจดหมายสีแดงพร้อมสุ่มสุ่ม = ใหม่สุ่ม (100); // ส่ง 5 ซองจดหมายสีแดงสำหรับ (int i = 0; i <5; i ++) {luckymones.put (Luckymoney ใหม่ ("ซองจดหมายสีแดง"+i, สุ่ม. nextint (100) +1)); } // รอจนกว่าซองจดหมายสีแดงจะถูกจับในขณะที่ (! luckymones.isempty ()) {thread.sleep (1); } // ยกเลิกด้ายคว้าซองจดหมายสีแดงสำหรับ (FutureTask FutureTask: FutureTasks) {FutureTask.cancel (จริง); }}} คลาส catchluckmoney ใช้งาน runnable {public catchluckmoney (linkedblockingqueue <Luckymoney> Luckymoneys, ชื่อสตริง) {this.luckymonesys = Luckymoneys; this.name = ชื่อ; } Private LinkedBlockingQueue <Luckymoney> Luckymoneys; ชื่อสตริงส่วนตัว; @Override โมฆะสาธารณะ Run () {ในขณะที่ (! thread.currentThread (). isInterrupted ()) {Luckymoney redpackage = null; ลอง {redpackage = luckymoneseys.take (); } catch (interruptedException e) {// e.printStackTrace (); หยุดพัก; } system.out.println (ชื่อ + "คว้า->" + redpackage); Luckymones.remove (Redpackage); } system.out.println ("สิ้นสุด >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> }} คลาส Luckymoney {Public Luckymoney (ชื่อสตริง, เงินจำนวนเต็ม) {this.name = name; this.money = เงิน; } ชื่อสตริงส่วนตัว; เงินจำนวนเต็มส่วนตัว @Override สตริงสาธารณะ toString () {return "Luckymoney {" + "name = '" name +'/'' + ", money =" + money + '}'; - เอฟเฟกต์การทำงาน:
เชื่อมต่อกับเป้าหมาย VM, ที่อยู่: '127.0.0.1:8869', การขนส่ง: 'ซ็อกเก็ต' ชื่อ 3 -> Luckymoney {name = 'revelope สีแดง 0', money = 16} name4 got -> Luckymoney {name = 'revelope 2', Money = 89} ชื่อ -> Luckymoney {name = 'Red Envelope 1', money = 51} name3 got -> Luckymoney {name = 'Red Envelope 4', money = 92} end>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - - -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น