اليوم ، سألني أحد الأصدقاء سؤال مقابلة. كان هناك 5 أشخاص يمسكون 5 مظاريف حمراء. يمكن إمساكها وتنفيذها بشكل متكرر باستخدام برامج متعددة الخيوط. هناك العديد من الطرق لتنفيذها. أود أن أشارك أفكاري: يتم تطبيق خصائص عرقلة قوائم الانتظار.
/*** تم إنشاؤه بواسطة Zhanglinqiang في 2016/6/23. */ الفئة العامة mytest {public static void main (string [] args) remrows interruptedException {linkedBlockingQueue <uctionyMoney> luckymoneys = new LinkedBlockingQueue <> () ؛ قائمة <TupureTask> futuretasks = new ArrayList <> () ؛ // الاستعداد للاستيلاء على مظاريف حمراء لـ (int i = 0 ؛ i <5 ؛ i ++) {futureTask <Object> futureTask = new FutureTask <> (new catchluckmoney (LuckyMoneys ، "name"+i) ، null) ؛ مؤشر ترابط جديد (futureTask ، "name"+i) .start () ؛ futuretasks.add (futureTask) ؛ } thread.sleep (5) ؛ // تأكد من أن مؤشر ترابط الاستيلاء على الظرف الأحمر جاهز عشوائي = جديد عشوائي (100) ؛ // إرسال 5 مظاريف حمراء لـ (int i = 0 ؛ i <5 ؛ i ++) {luckymoneys.put (New LuckyMoney ("advelope"+i ، random.nextint (100) +1)) ؛ } // انتظر حتى يتم أمسك المغلف الأحمر بينما (! luckymoneys.isempty ()) {thread.sleep (1) ؛ } // إنهاء مؤشر ترابط Grab Red Envelope لـ (FutureTask FutureTask: Futuretasks) {futureTask.cancel (true) ؛ }}} class catchluckmoneys runnable {public catchluckmoney (linkedBlockingqueue <uckyMoney> luckymoneys ، اسم السلسلة) {this.luckymoneys = luckymoneys ؛ this.name = name ؛ } private LinkedBlockingQueue <uckyMoney> LuckyMoneys ؛ اسم السلسلة الخاصة ؛ Override public void run () {بينما (! thread.currentThread (). iSinterrupted ()) {LuckyMoney RedPackage = null ؛ حاول {redPackage = LuckyMoneys.take () ؛ } catch (interruptedException e) {// e.printstacktrace () ؛ استراحة؛ } system.out.println (name + "gackbed->" + redpackage) ؛ Luckymoneys.remove (RedPackage) ؛ } system.out.println ("end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+thould.currentthread () ؛) ؛ }} class luckymoney {public luckymoney (اسم السلسلة ، integer money) {this.name = name ؛ this.money = المال ؛ } اسم السلسلة الخاصة ؛ الأموال العددية الخاصة ؛ Override public string toString () {return "LuckyMoney {" + "name = '" + name +'/'' + "، money =" + money + '}' ؛ }} تأثير الجري:
متصلاً بـ VM الهدف ، العنوان: "127.0.0.1:8869 '، النقل:' Socket 'name3 got - -> LuckyMoney {name = 'Red Envelope 1' ، Money = 51} name3 got - end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> >>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.