Сегодня друг задал мне вопрос об интервью. Там было 5 человек, которые захватили 5 красных конвертов. Их можно было неоднократно захватывать и реализовать с использованием многопоточных программ. Есть много способов их реализации. Я хотел бы поделиться своими идеями: применяются характеристики блокирующих очередей.
/*** Создано Чжанглинцян. 2016/6/23. */ public class myTest {public static void main (string [] args) бросает прерывания {linkedblockqueue <luckymoney> luckymoneys = new LinkedBlockingqueue <> (); Список <wutureTask> futureTasks = new ArrayList <> (); // Приготовьтесь захватить красные конверты для (int i = 0; i <5; i ++) {futureTask <object> futureTask = new FutureTask <> (новый CatchLuckMoney (LuckyMoneys, "name"+i), null); Новая ветка (FutureTask, "имя"+i) .start (); FutureTasks.Add (FutureTask); } Thread.sleep (5); // Убедитесь, что поток захвата красной конверты готов случайный случайный = новый случайный (100); // Отправить 5 красных конвертов для (int i = 0; i <5; i ++) {LuckyMoneys.put (new LuckyMoney ("Red Overvelope"+i, random.nextint (100) +1)); } // подождите, пока красный конверт не будет захвачен, пока (! LuckyMoneys.isempty ()) {Thread.sleep (1); } // Завершение потока захвата Red Overvelope для (FutureTask futureTask: FutureTasks) {futureTask.cancel (true); }}} класс CatchLuckMoney реализует runnable {public catchluckmoney (linkedblockqueue <luckymoney> Luckymoneys, String name) {this.luckymoneys = luckymoneys; this.name = name; } Частный LinkedBlockqueue <Luckymoney> Luckymoneys; Приватное название строки; @Override public void run () {while (! Thread.currentThread (). IsErengrupted ()) {LuckyMoney Redpackage = null; try {redpackage = luckymoneys.take (); } catch (прерывание Exception e) {// e.printstacktrace (); перерыв; } System.out.println (имя + "Grabbed->" + Redpackage); Luckymoneys.remove (Redpackage); } System.out.println ("end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+thread.currentthread (). GetName ()); }} класс LuckyMoney {public LuckyMoney (String name, Integer Money) {this.name = name; this.money = деньги; } private String name; частные целые деньги; @Override public String toString () {return "LuckyMoney {" + "name = '" + name +'/'' + ", money =" + money + '}'; }} Эффект бега:
Подключен к целевой виртуальной машине, адрес: '127.0.0.1:8869', транспорт: «Сокет» имя 3 get -> LuckyMoney {name = 'Red envelope 0', Money = 16} name4 ket -> LuckyMoney {name = 'Red Envelom -> LuckyMoney {name = 'Red Overvelope 1', Money = 51} name3 get -> LuckyMoney {name = 'Red Overvelope 4', Money = 92} Конец >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.