Heute hat mir ein Freund eine Interviewfrage gestellt. Es gab 5 Leute, die 5 rote Umschläge packten. Sie konnten wiederholt mit Multi-Thread-Programmen gepackt und implementiert werden. Es gibt viele Möglichkeiten, sie umzusetzen. Ich möchte meine Ideen teilen: Die Eigenschaften der Blockierung von Warteschlangen werden angewendet.
/*** Erstellt von Zhanglinqiang am 2016/6/23. */ public class myTest {public static void main (String [] args) löst unterbrochene Ausnahme aus {linkedBlockingQueue <LuckyRoney> luckyMoneys = new LinkedBlockingQueue <> (); Liste <Futuretask> futuretasks = new ArrayList <> (); // Bereite dich darauf vor, rote Umschläge für (int i = 0; i <5; i ++) zu greifen {futuretask <objekt> futuretask = new futuretask <> (neuer Catchluckmoney (LuckyMoneys, "Name"+i), null); neuer Thread (Futuretask, "Name"+i) .Start (); futuretasks.add (futuretask); } Thread.sleep (5); // Stellen Sie sicher, dass der Thread des Schnappens des roten Umschlags Random Random = New Random (100) ist; // 5 rote Umschläge für (int i = 0; i <5; i ++) {LuckyMoneys.put (New LuckyMoney ("Red Envelope"+i, random.nextint (100) +1)); } // Warten Sie, bis der rote Umschlag gewählt wird (! LuckyMoneys.isempty ()) {Thread.sleep (1); } // den Red Envelope Grab -Thread für (futuretask futuretask: futuretasks) {futuretask.cancel (true); }}} Klasse catcingluckmoney implementiert runnable {public CatchluckMoney (LinkedBlockingCocue <Luckyone> luckyymoneys, String -Name) {this.luckyMoneys = luckyMoneys; this.name = name; } Private Linked BlockingQueue <LuckyMoney> LuckyMoneys; privater Zeichenfolge Name; @Override public void run () {while (! Thread.currentThread (). IsInterrupted ()) {luckymeone redpackage = null; try {redpackage = luckyMoneys.take (); } catch (interruptedException e) {// e.printstacktrace (); brechen; } System.out.println (Name + "Grab->" + RedPackage); luckymoneys.remove (redpackage); } System.out.println ("Ende >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+Thread.curentThread (). Getname ()); }} Klasse LuckyMoney {public LuckyMoney (String -Name, Integer Money) {this.name = name; this.money = Geld; } privater Zeichenfolge Name; privates Ganzzahlgeld; @Override public String toString () {return "luckymeoney {" + "name = '" + name +'/'' + ", meyn =" + enden + '}'; }} Laufeffekt:
Connected to the target VM, address: '127.0.0.1:8869', transport: 'socket' name3 got -->LuckyMoney{name='red envelope 0', money=16} name4 got -->LuckyMoney{name='red envelope 3', money=89} name0 got -->LuckyMoney{name='red envelope 2', money=75} name1 got -> LuckyMoney {name = 'Red Envelope 1', Money = 51} Name3 Got -> LuckyMoney {name = 'Red Envelope 4', Money = 92} end>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.