Hoy, un amigo me hizo una pregunta de entrevista. Había 5 personas agarrando 5 sobres rojos. Podrían ser agarrados e implementados repetidamente utilizando programas de múltiples subprocesos. Hay muchas formas de implementarlos. Me gustaría compartir mis ideas: se aplican las características de bloquear las colas.
/*** Creado por Zhanglinqiang el 2016/6/23. */ public class mytest {public static void main (string [] args) lanza interruptedException {LinkedBlockingqueue <UddyMoney> LuckyMoneys = new LinkedBlockingqueue <> (); List <futUreTask> FUTURETASTS = new ArrayList <> (); // Prepárese para tomar sobres rojos para (int i = 0; i <5; i ++) {FutureTask <ject> FutUreTask = new FutureTask <> (New CatchluckMoney (LuckyMoneys, "Nombre"+I), NULL); nuevo hilo (FutUreTask, "Nombre"+I) .Start (); futuretasks.add (Futuretask); } Thread.sleep (5); // Asegúrese de que el hilo de agarrar el sobre rojo esté listo aleatorio = nuevo aleatorio (100); // Enviar 5 sobres rojos para (int i = 0; i <5; i ++) {LuckyMoneys.put (New LuckyMoney ("Red sobre"+I, Random.NextInt (100) +1)); } // espera hasta que se agarre el sobre rojo mientras (! LuckyMoneys.isEmpty ()) {Thread.sleep (1); } // Terminar el hilo de agarre de la envoltura roja para (FutUreTask FutureTask: FutUreTasks) {FutUreTask.Cancel (True); }}} class CatchLuckMoney implementa Runnable {public CatchLuckMoney (LinkedBlockingqueue <DordyMoney> LuckyMoneys, nombre de cadena) {this.luckyMoneys = LuckyMoneys; this.name = name; } Private LinkedBlokingqueue <DordyMoney> LuckyMoneys; nombre de cadena privada; @Override public void run () {while (! Thread.CurrentThread (). ISinterrupted ()) {LuckyMoney redpackage = null; intente {redpackage = LuckyMoneys.take (); } catch (InterruptedException e) {// E.PrintStackTrace (); romper; } System.out.println (nombre + "atrapado->" + redpackage); LuckyMoneys.Remove (Redpackage); } System.out.println("end>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+Thread.currentThread().getName()); }} clase LuckyMoney {public LuckyMoney (nombre de cadena, dinero entero) {this.name = name; this.money = dinero; } nombre de cadena privada; dinero entero privado; @Override public String toString () {return "LuckyMoney {" + "name = '" + name +'/'' + ", Money =" + Money + '}'; }} Efecto de ejecución:
Conectado a la VM de destino, Dirección: '127.0.0.1:8869', transporte: 'Socket' name3 Got -> LuckyMoney {name = 'Red Envelope 0', Money = 16} Name4 Got -> LuckyMoney {name = 'Red Envelope 3', Money = 89} name0 Got -> LuckyMoney {name = 'Redvelop -> LuckyMoney {name = 'rojo envolvente 1', dinero = 51} name3 Got -> LuckyMoney {name = 'rojo envolvente 4', dinero = 92} end>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.