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=