Hari ini, seorang teman menanyakan pertanyaan wawancara kepada saya. Ada 5 orang yang meraih 5 amplop merah. Mereka bisa berulang kali diraih dan diimplementasikan menggunakan program multi-threaded. Ada banyak cara untuk mengimplementasikannya. Saya ingin berbagi ide saya: Karakteristik antrian pemblokiran diterapkan.
/*** Dibuat oleh Zhanglinqiang pada 2016/6/23. */ kelas publik mytest {public static void main (string [] args) melempar interruptedException {linkedblockingqueue <ufuckymoney> luckymoneys = new LinkedBlockingQueue <> (); Daftar <FutureTask> futuretasks = ArrayList baru <> (); // Bersiaplah untuk meraih amplop merah untuk (int i = 0; i <5; i ++) {futuretask <bestigasi> futuretask = futuretask baru <> (CatchLuckMoney baru (LuckyMoneys, "name"+i), null); utas baru (futuretask, "name"+i) .start (); futuretasks.add (futuretask); } Thread.sleep (5); // Pastikan utas meraih amplop merah siap acak acak = acak baru (100); // Kirim 5 amplop merah untuk (int i = 0; i <5; i ++) {luckymoneys.put (new LuckyMoney ("Red Envelope"+i, Random.nextint (100) +1)); } // tunggu sampai amplop merah diraih saat (! LuckyMoneys.isempty ()) {thread.sleep (1); } // Hentikan utas ambil amplop merah untuk (futuretask futuretask: futuretasks) {futuretask.cancel (true); }}} class catchluckmoney mengimplementasikan runnable {public catchluckmoney (linkedblockingqueue <ufuckymoney> LuckyMoneys, nama string) {this.luckymoneys = luckymoneys; this.name = name; } Private LinkedBlockingQueue <PruckyMoney> LuckyMoneys; nama string pribadi; @Override public void run () {while (! Thread.currentThread (). IsInterrupted ()) {luckymoney redpackage = null; coba {redpackage = luckymoneys.take (); } catch (InterruptedException e) {// E.PrintStackTrace (); merusak; } System.out.println (name + "ambil->" + redpackage); luckymoneys.remove (redpackage); } System.out.println ("end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+thread.currentThread (). GetName ()); }} kelas LuckyMoney {public luckymoney (nama string, integer money) {this.name = name; this.money = uang; } nama string pribadi; uang bilangan bulat pribadi; @Override public string toString () {return "luckymoney {" + "name = '" + name +'/'' + ", Money =" + Money + '}'; }} Efek Menjalankan:
Terhubung ke VM Target, Alamat: '127.0.0.1:8869', Transport: 'Socket' Name3 got -> LuckyMoney {name = 'Red Envelope 0', Money = 16} Name4 -> LuckyMoney {name = 'Red Envelope 1', Money = 51} name3 got -> LuckyMoney {name = 'Red Envelope 4', Money = 92} Akhir >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.