Better RecursiveTask Example
"Dr Heinz M. Kabutz via Concurrency-interest" <[email protected]> Wed, 24 Nov 2021 21:15:12 +0200
| Newsgroups | gmane.comp.java.jsr.166-concurrency |
|---|---|
| Organization | JavaSpecialists.eu |
| Message-ID | <[email protected]> |
RXZlcnkgdGltZSBJIHNlZSB0aGUgZXhhbXBsZSBpbiBSZWN1cnNpdmVUYXNrIEkgaGF2ZSB0byBj cmluZ2U6CgpodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2Fw aS9qYXZhLmJhc2UvamF2YS91dGlsL2NvbmN1cnJlbnQvUmVjdXJzaXZlVGFzay5odG1sCgpGb3Ig YSBjbGFzc2ljIGV4YW1wbGUsIGhlcmUgaXMgYSB0YXNrIGNvbXB1dGluZyBGaWJvbmFjY2kgbnVt YmVyczoKCgogwqBjbGFzcyBGaWJvbmFjY2kgZXh0ZW5kcyBSZWN1cnNpdmVUYXNrPEludGVnZXI+ IHsKIMKgwqAgZmluYWwgaW50IG47CiDCoMKgIEZpYm9uYWNjaShpbnQgbikgeyB0aGlzLm4gPSBu OyB9CiDCoMKgIHByb3RlY3RlZCBJbnRlZ2VyIGNvbXB1dGUoKSB7CiDCoMKgwqDCoCBpZiAobiA8 PSAxKQogwqDCoMKgwqDCoMKgIHJldHVybiBuOwogwqDCoMKgwqAgRmlib25hY2NpIGYxID0gbmV3 IEZpYm9uYWNjaShuIC0gMSk7CiDCoMKgwqDCoCBmMS5mb3JrKCk7CiDCoMKgwqDCoCBGaWJvbmFj Y2kgZjIgPSBuZXcgRmlib25hY2NpKG4gLSAyKTsKIMKgwqDCoMKgIHJldHVybiBmMi5jb21wdXRl KCkgKyBmMS5qb2luKCk7CiDCoMKgIH0KIMKgfQpIb3dldmVyLCBiZXNpZGVzIGJlaW5nIGEgZHVt YiB3YXkgdG8gY29tcHV0ZSBGaWJvbmFjY2kgZnVuY3Rpb25zICh0aGVyZSAKaXMgYSBzaW1wbGUg ZmFzdCBsaW5lYXIgYWxnb3JpdGhtIHRoYXQgeW91J2QgdXNlIGluIHByYWN0aWNlKSwgdGhpcyBp cyAKbGlrZWx5IHRvIHBlcmZvcm0gcG9vcmx5IGJlY2F1c2UgdGhlIHNtYWxsZXN0IHN1YnRhc2tz IGFyZSB0b28gc21hbGwgdG8gCmJlIHdvcnRod2hpbGUgc3BsaXR0aW5nIHVwLiBJbnN0ZWFkLCBh cyBpcyB0aGUgY2FzZSBmb3IgbmVhcmx5IGFsbCAKZm9yay9qb2luIGFwcGxpY2F0aW9ucywgeW91 J2QgcGljayBzb21lIG1pbmltdW0gZ3JhbnVsYXJpdHkgc2l6ZSAoZm9yIApleGFtcGxlIDEwIGhl cmUpIGZvciB3aGljaCB5b3UgYWx3YXlzIHNlcXVlbnRpYWxseSBzb2x2ZSByYXRoZXIgdGhhbiAK c3ViZGl2aWRpbmcuCgoKCkluZGVlZCwgaXQgaXMgYSBkdW1iIHdheSB0byBjb21wdXRlIEZpYm9u YWNjaSwgYnV0IHRoZSAiZmFzdCBsaW5lYXIiIAphbGdvcml0aG0gaXNuJ3QgZmFzdCBlaXRoZXIu IFNpbmNlIHdlIG92ZXJmbG93IGV2ZW4gTG9uZyBhZnRlciBhYm91dCAKZmlib25hY2NpKDkwKSwg d2Ugd291bGQgbmVlZCBCaWdJbnRlZ2VyLiBBbmQgdGhlcmUgdGhlIGFkZCBpcyBsaW5lYXIsIApt ZWFuaW5nIHRoYXQgdGhlICJmYXN0IGxpbmVhciIgYWxnb3JpdGhtIHJlZmVycmVkIHRvIGhlcmUg aXMgcHJvYmFibHkgCmdvaW5nIHRvIGVuZCB1cCBhcyAic2xvdyBxdWFkcmF0aWMiLgoKVG8gbWUs IHRoaXMgZXhhbXBsZSBzZW5kcyB0aGUgY29tcGxldGVseSB3cm9uZyBtZXNzYWdlLiBMZXQncyB0 YWtlIHRoZSAKd29yc3QgcG9zc2libGUgYWxnb3JpdGhtIGFuZCBwYXJhbGxlbGl6ZSBpdC4gR3Jl YXQuIFRoYXQgbWVhbnMgaWYgd2UgdXNlIAoxMDAwIHByb2Nlc3NvcnMsIHdlIGNhbiBzb2x2ZSB0 aGUgcHJvYmxlbSBvZiBuKzEwIGluIHRoZSBzYW1lIHRpbWUgYXMgbiAKd2l0aCBhIHNpbmdsZSBw cm9jZXNzb3IuCgpJIGRvIHJlYWxpemUgdGhpcyBpcyBtZWFudCB0byBpbGx1c3RyYXRlIGEgcG9p bnQsIGJ1dCBpdCBkb2Vzbid0IGRvIGl0IAp2ZXJ5IHdlbGwgSU1FLiBJIHdvdWxkIGxpa2UgdG8g cHJvcG9zZSB0byBjaGFuZ2UgdGhpcyB0byBhIHNsaWdodGx5IApiZXR0ZXIgZXhhbXBsZSwgZm9y IGV4YW1wbGUgYSBGYWN0b3JpYWwgY2FsY3VsYXRpb246CgpwdWJsaWMgY2xhc3MgRmFjdG9yaWFs VGFzayBleHRlbmRzIFJlY3Vyc2l2ZVRhc2s8QmlnSW50ZWdlcj4gewogwqDCoMKgIHByaXZhdGUg ZmluYWwgaW50IGZyb20sIHRvOwoKIMKgwqDCoCBwdWJsaWMgRmFjdG9yaWFsVGFzayhpbnQgbikg ewogwqDCoMKgwqDCoMKgwqAgdGhpcygwLCBuKTsKIMKgwqDCoCB9CgogwqDCoMKgIHByaXZhdGUg RmFjdG9yaWFsVGFzayhpbnQgZnJvbSwgaW50IHRvKSB7CiDCoMKgwqDCoMKgwqDCoCB0aGlzLmZy b20gPSBmcm9tOwogwqDCoMKgwqDCoMKgwqAgdGhpcy50byA9IHRvOwogwqDCoMKgIH0KCiDCoMKg wqAgcHJvdGVjdGVkIEJpZ0ludGVnZXIgY29tcHV0ZSgpIHsKIMKgwqDCoMKgwqDCoMKgIGlmIChm cm9tID09IHRvKSB7CiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChmcm9tID09IDApIHJldHVy biBCaWdJbnRlZ2VyLk9ORTsKIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEJpZ0ludGVn ZXIudmFsdWVPZihmcm9tKTsKIMKgwqDCoMKgwqDCoMKgIH0KIMKgwqDCoMKgwqDCoMKgIGludCBt aWQgPSAoZnJvbSArIHRvKSA+Pj4gMTsKIMKgwqDCoMKgwqDCoMKgIEZhY3RvcmlhbFRhc2sgbGVm dFRhc2sgPSBuZXcgRmFjdG9yaWFsVGFzayhmcm9tLCBtaWQpOwogwqDCoMKgwqDCoMKgwqAgRmFj dG9yaWFsVGFzayByaWdodFRhc2sgPSBuZXcgRmFjdG9yaWFsVGFzayhtaWQgKyAxLCB0byk7CiDC oMKgwqDCoMKgwqDCoCBsZWZ0VGFzay5mb3JrKCk7CiDCoMKgwqDCoMKgwqDCoCBCaWdJbnRlZ2Vy IHJpZ2h0ID0gcmlnaHRUYXNrLmludm9rZSgpOwogwqDCoMKgwqDCoMKgwqAgQmlnSW50ZWdlciBs ZWZ0ID0gbGVmdFRhc2suam9pbigpOwogwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGxlZnQubXVsdGlw bHkocmlnaHQpOwogwqDCoMKgIH0KfQoKVGhpcyBpcyBhY3R1YWxseSBhICpsb3QqIGZhc3RlciB0 aGFuIHRoZSBzdHJlYW0gdmVyc2lvbjoKCiDCoMKgwqAgcHVibGljIHN0YXRpYyBCaWdJbnRlZ2Vy IGZhY3RvcmlhbFN0cmVhbShpbnQgbikgewogwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEludFN0cmVh bS5yYW5nZUNsb3NlZCgxLCBuKQogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5tYXBU b09iaihCaWdJbnRlZ2VyOjp2YWx1ZU9mKQogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC5yZWR1Y2UoQmlnSW50ZWdlci5PTkUsIEJpZ0ludGVnZXI6Om11bHRpcGx5KTsKIMKgwqDCoCB9 CgoodGhpcyBoYXMgdG8gZG8gbW9yZSB3aXRoIHRoZSBhbGdvcml0aG1zIHVzZWQgYnkgQmlnSW50 ZWdlcidzIG11bHRpcGx5IAptZXRob2QgdGhhbiB0aGUgcGFyYWxsZWxpemF0aW9uLCBidXQgdGhh dCBhbHNvIGhhcyBhbiBlZmZlY3QuCgoKQWx0ZXJuYXRpdmVseSwgaWYgd2UgaGF2ZSB0byBoYXZl IEZpYm9uYWNjaSwgY291bGQgd2UgYXQgbGVhc3QgY2hhbmdlIGl0IAp0byBEaWprc3RyYSdzIFN1 bSBvZiBTcXVhcmVzPyBJIGJlbGlldmUgdGhlcmUgYXJlIHNsaWdodGx5IGJldHRlciAKYWxnb3Jp dGhtcywgYnV0IHRoaXMgb25lIHdvcmtzIHZlcnkgbmljZWx5IHdpdGggcGFyYWxsZWxpc2F0aW9u OgoKcHVibGljIGNsYXNzIEZpYm9uYWNjaVRhc2sgZXh0ZW5kcyBSZWN1cnNpdmVUYXNrPEJpZ0lu dGVnZXI+IHsKIMKgwqDCoCBwcml2YXRlIGZpbmFsIGludCBuOwoKIMKgwqDCoCBwdWJsaWMgRmli b25hY2NpVGFzayhpbnQgbikgewogwqDCoMKgwqDCoMKgwqAgdGhpcy5uID0gbjsKIMKgwqDCoCB9 CgogwqDCoMKgIEBPdmVycmlkZQogwqDCoMKgIHByb3RlY3RlZCBCaWdJbnRlZ2VyIGNvbXB1dGUo KSB7CiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gc3dpdGNoIChuKSB7CiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNhc2UgMCAtPiBCaWdJbnRlZ2VyLlpFUk87CiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNhc2UgMSAtPiBCaWdJbnRlZ2VyLk9ORTsKIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVmYXVs dCAtPiB7CiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gRGlqa3N0cmEncyBTdW0g b2YgU3F1YXJlcyBBbGdvcml0aG0KIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQg aGFsZiA9IChuICsgMSkgLyAyOwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZpYm9u YWNjaVRhc2sgZjBfdGFzayA9IG5ldyBGaWJvbmFjY2lUYXNrKGhhbGYgLSAxKTsKIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmMF90YXNrLmZvcmsoKTsKIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBGaWJvbmFjY2lUYXNrIGYxX3Rhc2sgPSBuZXcgRmlib25hY2NpVGFzayho YWxmKTsKIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCaWdJbnRlZ2VyIGYxID0gZjFf dGFzay5pbnZva2UoKTsKIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCaWdJbnRlZ2Vy IGYwID0gZjBfdGFzay5qb2luKCk7CgogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChuICUgMiA9PSAxKSB7CiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB5 aWVsZCBmMC5tdWx0aXBseShmMCkuYWRkKGYxLm11bHRpcGx5KGYxKSk7CiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHlpZWxkIGYwLnNoaWZ0TGVmdCgxKS5hZGQoZjEpLm11bHRpcGx5KGYxKTsKIMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9CiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K IMKgwqDCoMKgwqDCoMKgIH07CiDCoMKgwqAgfQp9CgpQbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91 IGFncmVlIHdpdGggdGhpcyBjaGFuZ2UgKG9yIHByb3Bvc2UgYSBkaWZmZXJlbnQgCmV4YW1wbGUp LiBJIHdvdWxkIGJlIGhhcHB5IHRvIG1ha2UgdGhlIGNoYW5nZS4gSSBwcmVzdW1lIGl0IHdvdWxk IG5lZWQgCnRvIGJlIGRvbmUgaW4gdGhlIENWUz8gT3IgY2FuIEkgZG8gaXQgaW4gdGhlIE9wZW5K REsgR2l0SHViIHJlcG9zaXRvcnkgCmFuZCB0aGVuIHdlIGNhbiBzeW5jIHRoYXQgb3ZlciB0byBD VlM/IChNeSBwcmVmZXJlbmNlIHdvdWxkIGJlIEdpdEh1YikKCgoKClJlZ2FyZHMKCkhlaW56Ci0t IApEciBIZWlueiBNLiBLYWJ1dHogKFBoRCBDb21wU2NpKQpBdXRob3Igb2YgIlRoZSBKYXZh4oSi IFNwZWNpYWxpc3RzJyBOZXdzbGV0dGVyIiAtIHd3dy5qYXZhc3BlY2lhbGlzdHMuZXUKSmF2YSBD aGFtcGlvbiAtIHd3dy5qYXZhY2hhbXBpb25zLm9yZwpKYXZhT25lIFJvY2sgU3RhciBTcGVha2Vy ClRlbDogKzMwIDY5IDc1IDU5NSAyNjIKU2t5cGU6IGthYnV0egoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQ29uY3VycmVuY3ktaW50ZXJlc3QgbWFpbGlu ZyBsaXN0CkNvbmN1cnJlbmN5LWludGVyZXN0QGNzLm9zd2Vnby5lZHUKaHR0cDovL2NzLm9zd2Vn by5lZHUvbWFpbG1hbi9saXN0aW5mby9jb25jdXJyZW5jeS1pbnRlcmVzdAo=