오늘 친구가 인터뷰 질문을했습니다. 5 명의 빨간 봉투를 잡는 5 명이있었습니다. 그들은 멀티 스레드 프로그램을 사용하여 반복적으로 잡고 구현할 수 있습니다. 이를 구현하는 방법에는 여러 가지가 있습니다. 내 아이디어를 공유하고 싶습니다 : 차단 대기열의 특성이 적용됩니다.
/*** 2016/6/23에 Zhanglinqiang에 의해 만들어졌습니다. */ public class mytest {public static void main (String [] args)은 InterruptedException {LinkedBlockingqueue <LuckyMoney> luckyMoneys = new LinkedBlockingqueue <> (); List <FutureTask> FutureTasks = New ArrayList <> (); // (int i = 0; i <5; i ++) {futuretask <bood> futuretask = new FutureTask <> (New Catchluckmoney, "name"+i), null); 새 스레드 (FutureTask, "name"+i) .start (); FutureTasks.add (FutureTask); } stride.sleep (5); // 빨간 봉투를 잡는 실이 준비되어 있는지 확인하십시오 random random = new random (100); // (int i = 0; i <5; i ++)에 5 개의 빨간 봉투를 보내십시오 {lughymoneys.put (new LuckyMoney ( "Red Envelope"+i, random.nextint (100) +1)); } // 붉은 봉투가 잡힐 때까지 기다립니다 (! luckymoneys.isempty ()) {thread.sleep (1); } // (FutureTask FutureTask : FutureTasks) {futuretask.cancel (true); }}} Class CatchluckMoney는 런닝 가능한 {public catchluckmoney (linkedBlockingqueue <LuckyMoney> LuckyMoneys, String Name) {this.luckymoneys = luckymoneys; this.name = 이름; } private linkedBlockingqueue <LuckyMoney> LuckyMoneys; 개인 문자열 이름; @override public void run () {while (! Thread.currentThread (). islerrupted ()) {luckymoney redpackage = null; try {redpackage = luckymoneys.take (); } catch (InterruptedException e) {// e.printstacktrace (); 부서지다; } system.out.println (name + "grabbed->" + redpackage); LuckyMoneys.remove (redpackage); } system.out.println ( "end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>> >> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> getthread (). getname (); }} 클래스 LuckyMoney {public LuckyMoney (문자열 이름, 정수 돈) {this.name = name; this.money = 돈; } 개인 문자열 이름; 개인 정수 돈; @override public String toString () {return "luckyMoney {" + "name = ' + name +'/' +", money = " + money +'} '; }} 실행 효과 :
대상 VM, 주소에 연결되어 있습니다 : '127.0.0.1:8869', 운송 : '소켓'이름 3 got-> luckyMoney {name = 'Redvelope 0', money = 16} name4 got-> luckymoney { 'redvelope 3', money = 89} name0 got-> luckymoney {regvelope 2 ', gony = 75} -> LuckyMoney {name = 'Red Envelope 1', Money = 51} name3 got-> luckyMoney {name = 'Red Envelope 4', Money = 92} end>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.