From 764ff4bf5374e5c09bdd821a82537b2e283c15c3 Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Fri, 6 Jan 2017 00:57:47 +0100 Subject: [PATCH 1/9] Initial commit of guarded suspension design pattern --- guarded-suspension/README.md | 21 ++++++ guarded-suspension/etc/guarded-suspension.png | Bin 0 -> 8011 bytes .../etc/guarded-suspension.ucls | 22 ++++++ .../etc/guarded-suspension.urm.puml | 11 +++ guarded-suspension/pom.xml | 45 ++++++++++++ .../guarded/suspension/GuardedQueue.java | 66 ++++++++++++++++++ .../guarded/suspension/GuardedQueueTest.java | 53 ++++++++++++++ pom.xml | 1 + 8 files changed, 219 insertions(+) create mode 100644 guarded-suspension/README.md create mode 100644 guarded-suspension/etc/guarded-suspension.png create mode 100644 guarded-suspension/etc/guarded-suspension.ucls create mode 100644 guarded-suspension/etc/guarded-suspension.urm.puml create mode 100644 guarded-suspension/pom.xml create mode 100644 guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java create mode 100644 guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java diff --git a/guarded-suspension/README.md b/guarded-suspension/README.md new file mode 100644 index 000000000..df10a9ef3 --- /dev/null +++ b/guarded-suspension/README.md @@ -0,0 +1,21 @@ +--- +layout: pattern +title: Guarded Suspension +folder: guarded-suspension +permalink: /patterns/guarded-suspension/ +pumlid: RScv3SCm3030LU819FRPXg5fIm552tnYPFiyjRi3RkbAaYkdoQr5JBy369vrxz7oaSv6XmPhL3e6TCaJ0msU-CAoilTToyG8DdKOw5z0GzcAlvNAN_WZSD1brBHHPmxv0000 +categories: Concurrency +tags: + - Java + - Difficulty-Beginner +--- + +## Intent +Use Guareded suspension pattern to handle a situation when you want to execute a method on object which is not in a proper state. +![Guarded Suspension diagram](./etc/guarded-suspension.png) + +## Applicability +Use Guareded Suspension pattern when: + +* the developer knows that the method execution will be blocked for a finite period of time + diff --git a/guarded-suspension/etc/guarded-suspension.png b/guarded-suspension/etc/guarded-suspension.png new file mode 100644 index 0000000000000000000000000000000000000000..db962e539b40d41364de4496a41d1e6542f8cfff GIT binary patch literal 8011 zcmcJUWmFu^*6+!L2^O3{a2O=mFbNQX>);;TU4n+-p23~qZovk3cTIx3ySux-)dtk*ZZNn*4owGtEy{P?f?GmAbD9abW|c#1Ox=eF(nYC#4(-}mF#e#95d_MXA|ddhU?G1;p}<1G6`(+%<nEHw6=dvImMUalrK(jt&lseCaeM? zrHBhylHep#T;EjsN#DTewlMaFre248N%$|~EG|u(&@kbAFKws5I_XTM?l?=Ll*&a= zRHpdW_vg&5`1M!R!MoMu{B4@^c7Q{A-?4nx7rI@zk!HZ=exEu2FQIuu3A$Yg9BK$<1)ZPf?Bz?)d z3EjAgbYaZml$&r58YBH8H%%ZltlW)PDW)1-m^Fg`NC>i%r%SOLa_!sYTxa@oeP0n5 zt>_njkYdz~V-s=O8zYdu=1fqL;#8@WT}9IJtq(QSFagjkTy(#KZJckFZv>a!+DY-P zYlS01QS8tiY^)FFj)D{?S&%tnCnSZziR03oFl4z^Jm5!dyCYQv&bSO@=n+pmu9=yB z{?RhLl!0w1k3`O+rqiq*4JPfJ2B%$%mli5yrH~Jvbt*w>;6NS^R{P=psZCmF{P)Sg!5X5}oMXQFE~-MpqXyv+1=k zeH@H1e9cG?~n?~A+GAGuO-S(~sDlDjmvE6UnV((^U?LAVltZTjlcerJjEV0v} z-O!TSwRv^&@U)5oIe881ILc%eXK2yJ$6jNEgrD8U)>Hh<-V-r5NrGY`wp*t#{%8X(aW(+R`IE3 zgs~f4mpFl63D*q51Y7!sfpf#dFCpP7c}ufrVyc6R^QU9Db!QY!cUH;ObzQO@A9Do| zFM*|>(ynCkOHIV1>x>g!CGAKnvUiGNb0aSv(bU1s3$I@&umBSp02e}gJ<-@S2bdrp zC4AHnR7oONrK&b<1vx`_Rtmf!D7^C$&Up8x+g27>8d&uyvamI+qy`eup@vmG*k-C@IJF<< zz#8^3B2Q7T63nFBFS^-UcI<$$MJaOZN+Y8AG%<}W!2tKuM!Bokg|s=_vy_EzKI;yp zF(3P7B*3oN?=3ofk0umMqfil3^DEMvDT@mw!#Y;Q+(<wSc6-C8nel9K%tFwukN!&%c=oiRK^xU)ls@FCJLSJxplN5*} zG;oo-Fzo$5PaBh{qF)JI|7!j1NBqa1P)Gn0Lp7k3HQ-=q8AAn506dU^Y1*z9HqCpQ zEk^n72>Vwgo6y*MYBN298Vi?N=DxK;@-*lea=1)XNG$G zBknMwP$>$c0n)B^)#V)G#z6qlS2 z4~fEB#yu_dL(iCBDnf-gpH7w0-19U6SWO4hcS<{X7l!Zw!e3 z_(I72{^#Qq13YHmjOMW&K;N#)UnVew8*_UXdssLu`F81%DtOGf)s{E)?07{aK`dT_ zOTi+|x>T+Cd%RP=m!#KgjV)!j4}6Q=$+#m)z73nMEK?t00{a53Wf@DmjuK?tXCPut zva3%;J8Om0z0P@f5VOO!()Su8e${6;F4qL`Wb26I*TDT zc*^||NdZ0F`1D9GicIq3P0>)hF)|RkXj=%E&Iog1Q+E!ry3O=dnl46}FV2Ub$NH3H z(txa2^XX)SbXl*SM@|RT;bbB(v2_1E!h81AQ35>zhxt7Um69qpDP>t^)H7X3)B_`X zl2&yG@vstj<&aH{-O8vjTaq%BSF zR%xmIUU>tWm5n)EmE?BzDL`%b%X#`s4kuBR#&7LCkq zAYS;#y*V488VcI+IXcBwBE69lPh*I1G)Gb5UXlQXEXJPz;yGGZE|RNn;wRqE1I@&7 zbfaag3h(O*(V<;BIYlKh;;ZLdIUq!%troEFsqbfYiGGxmWyGu#@X{X3oo_BnBI2j? zT%0*&CSJucxO)Vj-@Kmz-oDPL&LvZ;Hd-tq)D0?T-cGo_3}yZ+#=Z+6NF%@y5)c3{ z-hbc(f@*YZ7i@Fx9g<4W*T`>hTar1dD`{kYf$9T=(E`%AC*4X7+-tZwfxG+&RCs~k zOtZxL)x)3kv#>uL%)`3h^xWFL&z z9dDMI8d2LL#W%AyGa~kAW1SWo<9NS99;c0&uh_8-lT4$5mk#>2$aQTRf#-0=0AW)T zk$c>z#eNQ+X4zOvCPdSwF`sow=dE*AmWwR(Hnh(kza6?p`W4Xr^32afXMPeelbD!v zsB%J|zRQL@p>3QTUfgm7I84rI5mG5gHQBp zh%QU~;~aG+jsjzTG1=W&-F+Rf2#XDBoI@pET8N;i z7!n$QNYqD*Jd81Je}Ou)v#nsRxMG^IMGq8sVkwVL#&M zX#)%HmY78X&il04Itux}>0FheD7i)(Ggl#1;W?U|5AV%=8(myDB326$|T=eEoz3&>BSh4$TTuEw4C=gD`ins>zRs)<4t&|aZ* zea0Znupvp8Bb}GENkphi?aHN=vC9_N4#8x)U{UDg;cV@4Te&hZ*_+a=o5@c+;?-$m zaazU`bxXH32nd=%Ro>ziOU}0hD9fvFvdDS)4Ogsd5Gbcl3&qK#IH%^@Bz^Tm{nPF& zsIQAZYvb1)=)vcVZN!iwL4!5^l72eP_q?<@zPb2V9Xw7slgi-ZI5{`Q=#VAbN*FFM zKtGF5FTc@{oEgQQ_$FoxCOepG?Ri2PaX;0V#IY|s=FDE%nf$K#Qn&7k;?b=lyG$~(n{YOk=11Z1NE7Ex zt2mkQ7Sr;TQPxXi!skRLU5*mAY>^?rSUqt$8>h2!_2+m_Pcyapke1!?FsBsxh!c5y ztn9^BRc*9L#%Nj(mT6Y3CSdAF=bdS)j%b#VSm8i5zoH;jo^^cMk+wa$Y-p5)g_%kD z%+Q0l?~6f(vP}IDSd@v9@s8Bw=`3#ZU5SnG#ro1q((`H_&#xG^aegJLYPHH8wkJrG z;Yq(6^Lzcj*k+MK%~d9Ju-z`V#XS?X{Be`N;f#>hxDRec+04RaE|z>Bkr zeH>sRn0+~0_mNrCJv8imK#q@gSdG1%R{l}((s<=TRAm1wpL$p+bE`YZ!b@pv+m}1? zba1Ow*4gd$?G0quc5{gt>q4YILS@!s;ap~)9rxWx0x<>F^3sccgfs~dfSXX4B7lkb zmh+#JQjZ|;F*8bhJ=X8L&ilBuYdPTCPojbp;-s6OJs`A?iZ6P?M)2S^N&o6-qksK9 zNC6A(W#A|>Zu)`|YE`Hfpf|dh+tWD|qD4&u28E5G@kB4Mzh?xuYl=9|82m9t6Uo7w z$INTV@i4%zLU~ZvWx^xCIWmqE5^yKb;xH}G4y5+=9mY{FE?X5EhpUX^14Mhabzf$Z zkew!`S0P?Fy<_jh=I;s*aBFTMsN(Goq}%2sE~J9vdWL=|Y}wm^flO%4&~n0HzGn%^ z*ua9Z24CT_Sqz4|8%S?iH^KV8Fz<}(Y=>L8e^rR$_pD)Z_qriD_Hv4`uDMAQ)wd#v zfH8Y~pandiv3NXgM4e!KSV8WHFL@W#to6pUp@(x=aQYNV|C~fJ=7$bXjLK_eHfk+_ zuN}oaoMMaX5)atdHU@v$<;~kU^(bd-2{vY$59|613zLa+t&9k|=r3IhM*beIr|-XK z^f@E--9ll2M?@KAJFl{Z5W{wpLM)A`Q_aOM>}RXvTBT<5g~5wDmf+ml>T;yPiKtc` zGvoV>$&el)QP>b%UeS*wr(`!OLFJ7`ro0O~HO++k4Rl^! zXdeoQgU=wHoqm;D!F}N9cwGj1Hq*$>q;r4sac3eUv?HkGpMX>&qZ67Ii7~Zh&t*~H zY$0d-tn6I92cE+I(N~vI6?2g|b|N_!=XjL%G2Keu(cC56Ok+!zF}=1^9-ex;up~na zJ4$&E)f;pD$!G<)pz6Te&AS-aZ^dUUJJr50F^S2m`wH1frt3FWaP{_klLiDS6S%|vp7-;q(&Dr~dWIIPbqe$-}XoUfZ9pIGXHLe+; zLG$ZdUx8r}`_RqWBKZZ9Wa`_eGD_%CCd^(y9Gqi|UfWH8QEvvrew%j6^xp31F4rtoARv=GF@eQmB z4Gb;tJg&DR^|<&#E}J%8ki$d+q5^~JwI)4H*AFneGEK|VJE%pB`fC>-LqyPeqbU@z zV>_=b6d*rmG{xze7W4Bn{a8n%KOQe$yc<7oFe0nMi&s#sRNs2DSvE{t2*~kO`CKkV zocFWrvuS;r=5n#)@XIiNfpnztshzEFtV^AwD;tQyk>sUQASv3W$Y|IIf!Wiej3HSE z+fLrHUM&iL)iauEYeoHsiT$?>d-0!?zDwy1vI~ER`^1-eyKy8VV{^}&o0v}|){xiO z44f)I3{qN0h}$P$FAoYHh{ zO8&)XT%2fZP{n{+Oce4%YV5QrJuS>nq0kJu`7kfrwk2^Xf0oY1F!a& z%QcLM|6G@>Ni}bla%m6X^dU`Pepc=NQ&9N3k=m$Z0;}9h9M;gM8l-mQ`m4raH%HML zq&xU#@&fs$(&wRsA>W|743*^VjP9t4CAbKHBnQ$Aw0!x=A)%0_Hif5ksuv+|xe3xz zFGq2z+?Ycfe)lvqZ(Qvib=Ytk*96PGq?lxFa{e7s+zNCd?lt3X$eUVsk`;n+h*9ID zktxK@#-aX7b4(kQ2)qjk#yOhuo4!~VEO#fRVV4Sf`II|3_QZ*Ay{2^>J`D?e*b^k6 zyT>rtdj=K-yP>5Y-L#NMc50@#=q$1|;WMhQ2!_`MYF^yX|8STkHoS6$(^(Mvn~-@8 z21@Pl`w5b(Tb6gnUJZ-2ByF7@B<&YG=7OetLVv7-$SMv8iaqXlZF@CdQRY=>{Mzj2 z5Q5!WfZQlf7Z6xc6sY8`sJ1?*w?~{od+targ>m7KILrdb0>RysTlNu!!ILdV=@Rd|M^Xo^i|4duV z1@YUg4q*QhcHC6$HVct##OVFWgMvr|0!5Zb1lz=mbY1s`tTlPkP_8|!&Po>DIeCfF#l}8z^7D0yQft31u}=?DO8U|X!m>xL#2+(GIh~CbMjw#-h|T@% zStN+4t*~jXjjJ$ohD9fNS$+A`e&h`sRcKy|FSH9!?9)*o9wf5zdxnzMk z<8DD;aj>j+0N^wBiKn)D08=(wvCMq)g3~n0TuPDN&7}ar2+X{;Vo2(e?vKYnl zn*C7lgY+(w!3paxY7Ad|^X?m9$DNyo{G@bE>lT^)BQ6=(*B30=TWI}<;{mf0JrEx> z*QQK5nJWCu3OTO?svdJ4sU}(boyAd6`1#g?X%~jBgJ3Cy4DTw+EmP9IvI1zWc&M=g zQOc`(rl78o9jH@)@uy*Fj?}zpEu%NeZ>p4yLu*K#!*9GqvVi|+mVb20-;8dV4lALp zYXi}hqV4yK=j`rZ$4aAs{f*S70VRW!;|jy#gv|BUi%?cI;3&k=qyYEIiT2!}gCA2b zg^(1s{c^0!i@MGEFJLr~mem(t#~`P_4h};rVhO;geG6wL^Kodf!%@lin|L$nzg)Ct z*C6Kcpy(TkT$Qz6CXk&t|G{Y+*ei05Ro@x#a_>5A1)1&n6=Y0|e0YFKn|fg5sPMQF z1}}y5b$JSwKlsN){`ZTmT7pH+NNJAO&EFR*Qd|9dNyABy#yprig|YK8;aLp%wYEpN zs1_yGqccjT`5WdOQb=0^_}*nCzin9qxwO~bs|CbVDQocVa4HgYgcvy_7E8eCi}~IB z-~I495e%sGB(Tmok9^(ihl(^o$RNmZIxVl;^^Ury(@>F)^KQHgu($W>84x;;I7iwJ z+nHILYGm|FkC!tQ?>qF8hdt<}9=?JYqjSi7uzQF>O8ywj&i3^;!@UbD5A518`7nPL zSDSR9Z^CRFti+*~L5bs=2JJ)UKnD$I5UASF?z02@*+Mwb|jZ{ud zth5TZr4ybp2C^ynk#`X*hL1x=h#6tn8YHn5HwY48A^wEG{ImX%u=V4U>E@90cDJwB z_sqAQ?Oex0&I8BMWo+5~@6k7WuG)vLhmNi9)i5S^1|`ZAmPF{Nee>0Sr30VD@0oyr z(Ek$_v8Apt?7bwEU*KyFezJ>G43Q z{0jp9q_+=T1^uUQzof-5BCub`_cF{*!@4a2wMzsFQl&4aCjtJosXp6&zr6^Af+X#y2F{_xLN+<4!dXF-ah=rHF<~ym``VMHY!kHa(k^S9B}N^t zcuWa8EZ?~QPhkzcs$(rzC{09l<((MPf2RT?S6Z${vpqq4zKRkQ)*zfr(q=u_4h@I> zvFipcWmx*46NqI_L7ocd7vnV+_LaCZP9AmT0f)U#RtqvqWLfckkqx8-n$v@In9nG(0AQlrVj$s+)KCuM)k3_Ff@V{d zrljja86VL3pgp`orp#wKa~5{Ep>e>c&r+su;50IZnPMc06g(grDlD_N0NZFPY#g%{ zKs3*_#H)pa*a~9g*jpof7)S3B3}t`O>!@sgD+^-W!%j*g6Pzd6rO(){WTW&5L*^V zQh&R*V}AF|HQ-tvEyT&(+-xQE+z7qN=|N(*F;Gfbfo|Ce6<-xAb+N1?x5 z@&EF&|IZJE17Il9TC#M18>)ow0(u>6FJNuHUv9lZN<|xOZj#xbi{uCrBC^mDAwBQ^ E0VIn*qW}N^ literal 0 HcmV?d00001 diff --git a/guarded-suspension/etc/guarded-suspension.ucls b/guarded-suspension/etc/guarded-suspension.ucls new file mode 100644 index 000000000..2e46325e4 --- /dev/null +++ b/guarded-suspension/etc/guarded-suspension.ucls @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guarded-suspension/etc/guarded-suspension.urm.puml b/guarded-suspension/etc/guarded-suspension.urm.puml new file mode 100644 index 000000000..f99607d82 --- /dev/null +++ b/guarded-suspension/etc/guarded-suspension.urm.puml @@ -0,0 +1,11 @@ +@startuml +package com.iluwatar.guarded.suspension { + class GuardedQueue { + - LOGGER : Logger {static} + - sourceList : Queue + + GuardedQueue() + + get() : Integer + + put(e : Integer) + } +} +@enduml \ No newline at end of file diff --git a/guarded-suspension/pom.xml b/guarded-suspension/pom.xml new file mode 100644 index 000000000..a7d813ae2 --- /dev/null +++ b/guarded-suspension/pom.xml @@ -0,0 +1,45 @@ + + + + + java-design-patterns + com.iluwatar + 1.14.0-SNAPSHOT + + 4.0.0 + + guarded-suspension + + + junit + junit + + + + + \ No newline at end of file diff --git a/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java b/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java new file mode 100644 index 000000000..a5b16544f --- /dev/null +++ b/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java @@ -0,0 +1,66 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.guarded.suspension; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.LinkedList; +import java.util.Queue; + + + +public class GuardedQueue { + private static final Logger LOGGER = LoggerFactory.getLogger(GuardedQueue.class); + private Queue sourceList; + + public GuardedQueue() { + this.sourceList = new LinkedList<>(); + } + + /** + * @return last element of a queue if queue is not empty + */ + public synchronized Integer get() { + while (sourceList.isEmpty()) { + try { + LOGGER.info("waiting"); + wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + return sourceList.peek(); + } + + /** + * @param e number which we want to put to our queue + */ + public synchronized void put(Integer e) { + sourceList.add(e); + notify(); + LOGGER.info("notifying"); + + } +} diff --git a/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java b/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java new file mode 100644 index 000000000..ca1ffad28 --- /dev/null +++ b/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java @@ -0,0 +1,53 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + *

+ * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + *

+ * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.guarded.suspension; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +/** + * Created by robertt240 on 1/2/17. + */ +public class GuardedQueueTest { + private volatile Integer value; + + @Test + public void testGet() { + GuardedQueue g = new GuardedQueue(); + ExecutorService executorService = Executors.newFixedThreadPool(2); + executorService.submit(() -> value = g.get()); + executorService.submit(() -> g.put(Integer.valueOf(10))); + executorService.shutdown(); + try { + executorService.awaitTermination(30, TimeUnit.SECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); + } + Assert.assertEquals(Integer.valueOf(10), value); + } + +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5ddd3bf98..242ae4b1a 100644 --- a/pom.xml +++ b/pom.xml @@ -134,6 +134,7 @@ event-asynchronous queue-load-leveling object-mother + guarded-suspension From 1824b4138b17c972fc0012c5cb91e82938e5ddb4 Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Fri, 6 Jan 2017 01:00:23 +0100 Subject: [PATCH 2/9] readme fix --- guarded-suspension/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/guarded-suspension/README.md b/guarded-suspension/README.md index df10a9ef3..ca6f5886f 100644 --- a/guarded-suspension/README.md +++ b/guarded-suspension/README.md @@ -3,7 +3,6 @@ layout: pattern title: Guarded Suspension folder: guarded-suspension permalink: /patterns/guarded-suspension/ -pumlid: RScv3SCm3030LU819FRPXg5fIm552tnYPFiyjRi3RkbAaYkdoQr5JBy369vrxz7oaSv6XmPhL3e6TCaJ0msU-CAoilTToyG8DdKOw5z0GzcAlvNAN_WZSD1brBHHPmxv0000 categories: Concurrency tags: - Java From a09866d35b146517c6ca02e68992048031b04ba7 Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Fri, 6 Jan 2017 01:01:47 +0100 Subject: [PATCH 3/9] another readme fix --- guarded-suspension/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/guarded-suspension/README.md b/guarded-suspension/README.md index ca6f5886f..01c03f192 100644 --- a/guarded-suspension/README.md +++ b/guarded-suspension/README.md @@ -11,6 +11,7 @@ tags: ## Intent Use Guareded suspension pattern to handle a situation when you want to execute a method on object which is not in a proper state. + ![Guarded Suspension diagram](./etc/guarded-suspension.png) ## Applicability From e5034c6ae99e11684f4dd8d9d5ee74b14a361c4a Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Fri, 6 Jan 2017 01:25:47 +0100 Subject: [PATCH 4/9] guarded suspension pattern #69 --- .../java/com/iluwatar/guarded/suspension/GuardedQueue.java | 7 +++---- .../com/iluwatar/guarded/suspension/GuardedQueueTest.java | 3 --- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java b/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java index a5b16544f..47939141f 100644 --- a/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java +++ b/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -29,7 +29,6 @@ import java.util.LinkedList; import java.util.Queue; - public class GuardedQueue { private static final Logger LOGGER = LoggerFactory.getLogger(GuardedQueue.class); private Queue sourceList; diff --git a/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java b/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java index ca1ffad28..45251acbf 100644 --- a/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java +++ b/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java @@ -29,9 +29,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -/** - * Created by robertt240 on 1/2/17. - */ public class GuardedQueueTest { private volatile Integer value; From 29715028d15f2afa442edefa4088cf6c4cf49f71 Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Mon, 9 Jan 2017 21:17:36 +0100 Subject: [PATCH 5/9] fix in POM formatting #69 --- guarded-suspension/pom.xml | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/guarded-suspension/pom.xml b/guarded-suspension/pom.xml index a7d813ae2..8326a6e96 100644 --- a/guarded-suspension/pom.xml +++ b/guarded-suspension/pom.xml @@ -26,20 +26,18 @@ - - java-design-patterns - com.iluwatar - 1.14.0-SNAPSHOT - - 4.0.0 - - guarded-suspension - - - junit - junit - - - + + java-design-patterns + com.iluwatar + 1.14.0-SNAPSHOT + + 4.0.0 + guarded-suspension + + + junit + junit + + \ No newline at end of file From f09578c091f9536ecba2a45589866bd2fa1c9a0d Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Mon, 9 Jan 2017 21:25:24 +0100 Subject: [PATCH 6/9] further POM rearragments #69 --- guarded-suspension/pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/guarded-suspension/pom.xml b/guarded-suspension/pom.xml index 8326a6e96..9e44d410b 100644 --- a/guarded-suspension/pom.xml +++ b/guarded-suspension/pom.xml @@ -23,16 +23,16 @@ THE SOFTWARE. --> - + + 4.0.0 - java-design-patterns com.iluwatar + java-design-patterns 1.14.0-SNAPSHOT - 4.0.0 - + jar guarded-suspension From 7423f47daac7d84d4e3fe78d85340296c2b28254 Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Mon, 9 Jan 2017 21:37:09 +0100 Subject: [PATCH 7/9] further POM rearragments #69 --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 242ae4b1a..5ddd3bf98 100644 --- a/pom.xml +++ b/pom.xml @@ -134,7 +134,6 @@ event-asynchronous queue-load-leveling object-mother - guarded-suspension From a20abae21cd990965adea18c2647345b2729fafe Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Tue, 28 Feb 2017 15:06:50 +0100 Subject: [PATCH 8/9] apply changes from review #69 --- guarded-suspension/README.md | 8 +- guarded-suspension/etc/guarded-suspension.png | Bin 8011 -> 10318 bytes guarded-suspension/pom.xml | 1 + .../com/iluwatar/guarded/suspension/App.java | 76 ++++++++++++++++++ .../guarded/suspension/GuardedQueue.java | 8 +- .../guarded/suspension/GuardedQueueTest.java | 8 ++ pom.xml | 4 +- 7 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/App.java diff --git a/guarded-suspension/README.md b/guarded-suspension/README.md index 01c03f192..35044f9b2 100644 --- a/guarded-suspension/README.md +++ b/guarded-suspension/README.md @@ -10,12 +10,12 @@ tags: --- ## Intent -Use Guareded suspension pattern to handle a situation when you want to execute a method on object which is not in a proper state. +Use Guarded suspension pattern to handle a situation when you want to execute a method on object which is not in a proper state. ![Guarded Suspension diagram](./etc/guarded-suspension.png) ## Applicability -Use Guareded Suspension pattern when: - -* the developer knows that the method execution will be blocked for a finite period of time +Use Guarded Suspension pattern when the developer knows that the method execution will be blocked for a finite period of time +## Related patterns +* Balking diff --git a/guarded-suspension/etc/guarded-suspension.png b/guarded-suspension/etc/guarded-suspension.png index db962e539b40d41364de4496a41d1e6542f8cfff..bd3fa5661fab47538fb3df095fecd6bbfba7217b 100644 GIT binary patch literal 10318 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 literal 8011 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 E0VIn*qW}N^ diff --git a/guarded-suspension/pom.xml b/guarded-suspension/pom.xml index 9e44d410b..e3a13f2c8 100644 --- a/guarded-suspension/pom.xml +++ b/guarded-suspension/pom.xml @@ -38,6 +38,7 @@ junit junit + test \ No newline at end of file diff --git a/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/App.java b/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/App.java new file mode 100644 index 000000000..8747c84e5 --- /dev/null +++ b/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/App.java @@ -0,0 +1,76 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * Guarded-suspension is a concurrent design pattern for handling situation when to execute some action we need + * condition to be satisfied. + *

+ * Implementation is based on GuardedQueue, which has two methods: get and put, + * the condition is that we cannot get from empty queue so when thread attempt + * to break the condition we invoke Object's wait method on him and when other thread put an element + * to the queue he notify the waiting one that now he can get from queue. + */ +package com.iluwatar.guarded.suspension; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +/** + * Created by robertt240 on 1/26/17. + */ +public class App { + /** + * Example pattern execution + * + * @param args - command line args + */ + public static void main(String[] args) { + GuardedQueue guardedQueue = new GuardedQueue(); + ExecutorService executorService = Executors.newFixedThreadPool(3); + + //here we create first thread which is supposed to get from guardedQueue + executorService.execute(() -> { + guardedQueue.get(); + } + ); + + //here we wait two seconds to show that the thread which is trying to get from guardedQueue will be waiting + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + //now we execute second thread which will put number to guardedQueue and notify first thread that it could get + executorService.execute(() -> { + guardedQueue.put(20); + } + ); + executorService.shutdown(); + try { + executorService.awaitTermination(30, TimeUnit.SECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + +} diff --git a/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java b/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java index 47939141f..89b330bfb 100644 --- a/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java +++ b/guarded-suspension/src/main/java/com/iluwatar/guarded/suspension/GuardedQueue.java @@ -31,7 +31,7 @@ import java.util.Queue; public class GuardedQueue { private static final Logger LOGGER = LoggerFactory.getLogger(GuardedQueue.class); - private Queue sourceList; + private final Queue sourceList; public GuardedQueue() { this.sourceList = new LinkedList<>(); @@ -49,7 +49,7 @@ public class GuardedQueue { e.printStackTrace(); } } - + LOGGER.info("getting"); return sourceList.peek(); } @@ -57,9 +57,9 @@ public class GuardedQueue { * @param e number which we want to put to our queue */ public synchronized void put(Integer e) { + LOGGER.info("putting"); sourceList.add(e); - notify(); LOGGER.info("notifying"); - + notify(); } } diff --git a/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java b/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java index 45251acbf..41eaccd49 100644 --- a/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java +++ b/guarded-suspension/src/test/java/com/iluwatar/guarded/suspension/GuardedQueueTest.java @@ -47,4 +47,12 @@ public class GuardedQueueTest { Assert.assertEquals(Integer.valueOf(10), value); } + @Test + public void testPut() { + GuardedQueue g = new GuardedQueue(); + g.put(12); + Assert.assertEquals(Integer.valueOf(12), g.get()); + + } + } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5ddd3bf98..d2ea715a7 100644 --- a/pom.xml +++ b/pom.xml @@ -121,7 +121,7 @@ factory-kit feature-toggle value-object - module + module monad mute-idiom mutex @@ -134,6 +134,8 @@ event-asynchronous queue-load-leveling object-mother + guarded-suspension + From 449aed1a5346f7cc2c58c76aa7f39368f32c7ed9 Mon Sep 17 00:00:00 2001 From: Robert Kasperczyk Date: Sat, 11 Mar 2017 12:02:04 +0100 Subject: [PATCH 9/9] changed parent POM version #69 --- guarded-suspension/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guarded-suspension/pom.xml b/guarded-suspension/pom.xml index e3a13f2c8..b51de54e1 100644 --- a/guarded-suspension/pom.xml +++ b/guarded-suspension/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.14.0-SNAPSHOT + 1.15.0-SNAPSHOT jar guarded-suspension