Aujourd'hui, un ami m'a posé une question d'entrevue. Il y avait 5 personnes saisissant 5 enveloppes rouges. Ils pourraient être saisis à plusieurs reprises et mis en œuvre à l'aide de programmes multipliés. Il existe de nombreuses façons de les mettre en œuvre. Je voudrais partager mes idées: les caractéristiques du blocage des files d'attente sont appliquées.
/ ** * Créé par Zhanglinqiang le 2016/6/23. * / public class MyTest {public static void main (String [] args) lance InterruptedException {LinkedBlockerQueue <ChURSYMoney> LuckyMoneys = new LinkedBlockingQueue <> (); List <FutureTask> Futuretasks = new ArrayList <> (); // Préparez-vous à saisir des enveloppes rouges pour (int i = 0; i <5; i ++) {FutureTask <Bject> FutureTask = new FutureTask <> (new CatchluckMoney (LuckyMoneys, "Name" + i), null); Nouveau thread (FutureTask, "Name" + i) .start (); Futuretasks.add (FutureTask); } Thread.Sleep (5); // Assurez-vous que le fil de saisie de l'enveloppe rouge est prêt aléatoire aléatoire = nouveau aléatoire (100); // Envoie 5 enveloppes rouges pour (int i = 0; i <5; i ++) {LuckyMoneys.put (new LuckyMoney ("Red Enveloppe" + i, random.nextint (100) +1)); } // Attendez que l'enveloppe rouge soit saisie pendant que (! LuckyMoneys.isempty ()) {Thread.Sleep (1); } // Terminez le thread de Grab de l'enveloppe rouge pour (FutureTask FutureTask: FutureTasks) {FutureTask.Cancel (true); }}} classe CatchluckMoney implémente Runnable {public CatchLuckMoney (LinkedBlockingQueue <ChURSYMoney> LuckyMoneys, nom de chaîne) {this.luckyMoneys = LuckyMoneys; this.name = name; } privé LinkedBlockingQueue <ChUctyMoney> LuckyMoneys; nom de chaîne privé; @Override public void run () {while (! Thread.currentThread (). IsInterrupted ()) {LuckyMoney redpackage = null; essayez {redPackage = LuckyMoneys.Take (); } catch (InterruptedException e) {// e.printStackTrace (); casser; } System.out.println (Name + "Strabbed ->" + redPackage); LuckyMoneys.Remove (Redpackage); } System.out.println ("fin >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + Thread.currentThread (). GetName ()); }} classe LuckyMoney {public luckyMoney (nom de chaîne, argent entier) {this.name = name; this.money = argent; } nom de chaîne privée; argent entier privé; @Override public String toString () {return "LuckyMoney {" + "name = '" + name +' / '' + ", monery =" + monery + '}'; }} Effet de course:
Connecté à la machine virtuelle cible, adresse: '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} Got11 Got -> LuckyMoney {name = 'Red Enveloppe 1', Money = 51} name3 Got -> LuckyMoney {name = 'Red Envelope 4', Money = 92} end>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.