From a64bb3c6b42dcbdffdb5dba4b2055cee8f262f27 Mon Sep 17 00:00:00 2001 From: Kanken6174 Date: Wed, 25 Jan 2023 15:13:16 +0100 Subject: [PATCH] part 3 --- out/production/TP2/Main.class | Bin 1369 -> 1449 bytes out/production/TP2/Main3A.class | Bin 0 -> 1316 bytes out/production/TP2/sweet/Boulangerie.class | Bin 1062 -> 1077 bytes .../TP2/sweet/BoulangerieThreadSafe.class | Bin 1083 -> 1230 bytes out/production/TP2/sweet/Client.class | Bin 904 -> 1022 bytes out/production/TP2/sweet/Gateau.class | Bin 259 -> 362 bytes out/production/TP2/sweet/LimitedClient.class | Bin 889 -> 962 bytes out/production/TP2/sweet/Patissier.class | Bin 1139 -> 1171 bytes src/Main.java | 4 ++- src/Main3A.java | 21 ++++++++++++ src/Main3B.java | 21 ++++++++++++ src/sweet/Boulangerie.java | 19 ++++------- src/sweet/BoulangerieThreadSafe.java | 14 ++++---- src/sweet/Client.java | 4 +-- src/sweet/Gateau.java | 2 +- src/sweet/LimitedClient.java | 3 ++ src/sweet/Patissier.java | 6 ++-- src/sweet/PatissierSuicidal.java | 31 ++++++++++++++++++ 18 files changed, 100 insertions(+), 25 deletions(-) create mode 100644 out/production/TP2/Main3A.class create mode 100644 src/Main3A.java create mode 100644 src/Main3B.java create mode 100644 src/sweet/PatissierSuicidal.java diff --git a/out/production/TP2/Main.class b/out/production/TP2/Main.class index 4e1b9e55fc0913b2acf0c0b75fdd8d1e304ee6a4..a41415f0c4b715d3a0e1b896de3322fe5586a380 100644 GIT binary patch delta 407 zcmYk1+b#o96o$W<&dg?tHlxKvLZnw!lOnE4TxjAPr#g*uHH}l#3yMpLH;_Jqh)apI z4Z(#wZ{Qs~0~Qw|d+nXIlK=bvz25EHp#Apw@C*#Ib7fz5H=La3^QC0EaF8#SY#hRh z77gbxdzMWWvc6)1et%(Zlayue))rj2?N?DI2eAlYty?FQZ1}Y3B zBBW{zRT#NLV~Tkei4$PrcbSm9b#m$nW8)I!B1QuqjihN}jF2FXKvBV(Sth~`E$q|E zF>Oo=J}!S>7I>C9te-7Jz3^*$L`Eo0taB`hMwfs!R#=tzn5cc349Oa0T{@Eup*rK} aUqV@mO@&g}ibjPag{FuH#cxY=I@{m7)kpdO delta 348 zcmWlT%Sr-K7{`A)BS%L?v(bwa+__A{`)h zedjpcV!d7#OjJeg~})lC4B)!E-J1gQ3N^u2RS-Ex&QzG diff --git a/out/production/TP2/Main3A.class b/out/production/TP2/Main3A.class new file mode 100644 index 0000000000000000000000000000000000000000..79d898406fd417be4c0362354c208076755231ae GIT binary patch literal 1316 zcma)6SyR+N80^`Dfe>UlJn*)>7FUc1o_H;Ip#haetktI>JHqI0LS?hA|Hx;nEU={1 zcc1)4YR|?JEO;rS{*InbzW@CE6~Ij_ILII?k#mtpmq6jQdaJy;3YWaci?4N% z2y|UHp-FBEWQ(H<65RrW?I^C-y!qu=tJ-s|-s;$av|)M$_BGpDC*EY#vQczwbc(B} zSK5JNQ9A_sQ`8fcm}b*hejf_9h5>FmW)9f-P*1ixKP?ywVw+3S#%h>PYfR!WPw%ysCLoN>6oow6+ z^OTN{{Ndmjj!T?yaT3LU#7lc-fM#9m6@gswq3z(5z`>2A(_y0HxV6HH@4gH4N@Ai= z;aKgbwT#~r#;tH+`jCM-;A0{xD2;YQyw$)hF@x1MVSM5iEsxPS6*!7>yT(WFuqjqdf+4D06gE046cTRS)jqE_X;4S^C_1`^7qBbqziKIvmdK z%sTq2r`OOwTgrdIU^P2dspi%(Z1;9mR;M1& literal 0 HcmV?d00001 diff --git a/out/production/TP2/sweet/Boulangerie.class b/out/production/TP2/sweet/Boulangerie.class index a552c8798052f522a6b48999337072676c1484f9..8bb61c960455b5f15493225df89014faac435103 100644 GIT binary patch delta 419 zcmYL_ze>YU6vn^YL~}`F48~TC5C{&EwAHr$|N8>!AP$17h)4$&J9X*c>Qb^fi(MRT z1_vKNd<`GK!PWX*d!Yo*xtw#p-K7#^gUCbdgATKXkC#~!A zX7}sCcVHuRQC1D>?y8;L7*EDoRusqCt*8eT0tBkCU|JkF41-o vbzA>-+f+#Ek8DIHU3o(7-C$N5OSMssWVDXD6F653nTBVP8f;*PHG$nflVC6y delta 424 zcmYk2yGjF56h-%)8J+POlSnWxAvhv}GvhP91wTMi_yF?(5+qnym`0m)scgb@wt{ID zbP5Z#7JtOX!VfU+lMI^X+{<~aefD{B?i~I8^ZWu}7dvhJk+P9bpn#%+by2^nwLh=J zmbz8Pp=TV7IH$G7QRDpNEW9+znK@1w@L)k<2*Zqi_-eS#fO*XdV6*06p1%aEKpG2J z_rPHjFBL;Y=0uANzV$( zVsIeP2)Ub{#AK)YUFmecBxy#Ndc#a5R-LW-_ng(ljiW?akdAzYeqFST3Rd4a(tw>47t;n5eMDih=E4gfTPg diff --git a/out/production/TP2/sweet/BoulangerieThreadSafe.class b/out/production/TP2/sweet/BoulangerieThreadSafe.class index 558050e467d06a5b3ff7c7d9faf9f2fbf2e068ba..a278b2ea7427b4ed9ef1f8f5ee76bf1a260b5997 100644 GIT binary patch delta 554 zcmYjNOD_Xq6g_vQ&oLOaXfbNM`#?SFortiKRDvD52@{!xl1>w0(~X5~Giz&`E-E2S z39+{DkBIxtOt884yZ5{2oO|v|>@%)>d_TVd*uYv{`5Nh|SZAhPw#%p6=7o7|SFZ?i zCcD#tUi7Kx$AB9qg9hCR8jlRAFfi=ylQA|*(40%lsuuRls_i&d#kK@yT*U;Egpgxj zyEpXOeME@br{(jCbwV&oZkE!t?rur-+9YowA%hSIVMI7)xwGljKqA)yZFUt^O36=r6xvO!%2WjpIQGNoDX}Q7 zUHC_eXU5RDna8>3F>}7$;e_}3^ZE|p7>8Z&TSrord3`GN;-ZfwEbDuz&8!H518c4|~BtfBzHIEq}?h@99vP!0!>a0urrI2yoxf#0|Mb*>(D zfJ>%_4W4{zsX!f@+yz_M&fKoa93xf=pW#O-$_h^?H2WNPjL#(II5(bCe>`FV&(qeo zVslEFFI}*MkkW{J2de2%&Fe1qvbYQG=4pY6OR*sMK(%)!J>uq>d7Ot^L!4z+<=-EI hEXyRY5t|^`AGKp}Vc8yD78Q8U4$FzI7T6iU`K z)xVyXzn;nHExJr?{b_gI6_E;SxWRKxbrJ6kZLZETVK=b{dW)a0nIc9>Ji^52BPq9k zrwCFb=#mT#w8<1<$q>UQ3J-C-B;;-XlEtNGhFS4I`YRbz$Y0oGh}LyY(vaGmR4vSZ E0fkIMmjD0& delta 338 zcmX|+y-or_6otQ8)IoMJ23BN277X~q;y?ZuHYQd!R{AVhXlY?X_93V-ipIiT-@sR} z@Db3nLd+y*?wNbexp#*4&SpM_uW!H!$KA|*w_kI8<}3w|d5Uqxv`s0#FjaSfiY4@@ zQj4$6soP-5vh1W8CnYg1n6Fp<1))Th> zr`Z(FkP>=KkY!qIORO+bv(1i}e6*!7I=f7bGjGS4Vf2U{kiG0Ykk17J%07!P)O$Z) z=RHz=$!8T9(A1!0V2BmwNo(1plk@_8yF`%+<^Kgr((kb^f8rUfa-ce`_bW>?rOu(a G!_hCC@+R~E diff --git a/out/production/TP2/sweet/Gateau.class b/out/production/TP2/sweet/Gateau.class index c834982f17942523c7ad3b43860d1979a52d4e83..ace239f475f73b11c463c62a03ecbe63faa12d2e 100644 GIT binary patch delta 224 zcmZo>dd0+b>ff$?3=9l*45Aac98I_w*cq5Pfdn@X0}lf)BZHv3V~DF`XuPX$fWK$3 zzn`BgBLkmLad~QLiN1ScNor!L^+a!TP7a&ooXot;61#~LRq7cTBte>irZO=wGO#kR z0ZBd}&lpHE0%=yQ?F@_?!P5Ldk_)Jefq|cag+Txa8Gu^BiWmgJMsP3)!3|Ibt7Kr{ j-p#-sxt)P?GXodM7)GFG2CyQa6aym%gD{ZG#2^9yGmjlx delta 119 zcmaFG)Xcff$?3=9l*3<49m94FSB^Yi%>m#3zd=({JDq$ZYHPu#EK$H2e{gsco~ zK#~)v*ci-bU|`kS&cL`4D8R(P1thtEGy?-a0}F!y12>Sx15^f71f+R^G$R8akYr-u F2LSVj5VimS diff --git a/out/production/TP2/sweet/LimitedClient.class b/out/production/TP2/sweet/LimitedClient.class index 1055c604c2284ccbd90f7a2be8fc9266785709a4..c59e4210d2771aff8c98c9730b042e2a046f270f 100644 GIT binary patch delta 408 zcmX|7%`XE{9GtgX``X=YwcF|kx{4~@wv<-YM>sf$#KBG6B;_PHh;#n}hs`FgE|Q)r zRpLP6=t|;malur@WnSj@X6DWNeQGaKfBkxV0LRH?bQ|AdlS!10R;w3KCVDu02*QmsX*h*@2uHnxZ2yYN#1K@XM!63k z)2;9KofgzKLvkpxU5PQh8aV`rCKnWh#Zor6ltYA?7*!TEQI?7S*DKSvggSFrpdj0vM)M(L** zg;s-OMRVr7m-D{oMSnW(>(}EGaKvHio~KvFD^b=2J{79zP1mb4rD^y~Gn0OFRG397 z_U345jL$p^Sx+5%5zCqtpHxpPBso4om>pC zhhh&Tut|)aml?F2c@!lwpd?yF)H0!<7B&7K2*uxFPwu5;{K~%UMd5pz*cPQL*y7*^ D-KHl& diff --git a/out/production/TP2/sweet/Patissier.class b/out/production/TP2/sweet/Patissier.class index bec6178f9aee797f4a3a9be823d7c3bded6e9394..87d99dfaac7ca7fb3205239c9f5e8f22083e461a 100644 GIT binary patch delta 361 zcmX|+OD{uF6otQYFRt5r2Q(DbM`*RQUe%VCsz<$BVaiZqC?t$b{D?DREa^;AkxNMY z025O)Kf)ZlmB>lf*=Oyw*IwtVQ`^3`@8?&b%x=SXq#}ntEaEOBI12Op_`)X1sKuB| zinP8|Sv8^WRMeSb+9KmJLsoyNiZe&SqUbWuf=(E5wWzB`OfBhC<5QLOo;lFIjABKf zn8~YES?H%tuuISp?50D~43;uG{-ktHPk z06v0?tGhd*epqT;Z^s;(FXwWiOFyxP!B<3p|M3v;4>6Gctmn8oInJaFj~91=_j z4l^puwlGPI9`3L!x!c!erX= sweets = new ArrayList<>(); - /** - * - */ - public synchronized void depose(Patisserie p) { + public synchronized boolean depose(Patisserie p) { this.notify(); sweets.add(p); + return true; } - /** - * - */ + public synchronized Patisserie achete() { - while(sweets.size() == 0) { + while(getStock() == 0) { try {this.wait();} catch (InterruptedException ignored) {}} Patisserie pat = sweets.get(0); sweets.remove(pat); return pat; } - /** - * - */ - public void getStock() { - // TODO implement here + public int getStock(){ + return sweets.size(); } } \ No newline at end of file diff --git a/src/sweet/BoulangerieThreadSafe.java b/src/sweet/BoulangerieThreadSafe.java index 414c0bc..5a562d0 100644 --- a/src/sweet/BoulangerieThreadSafe.java +++ b/src/sweet/BoulangerieThreadSafe.java @@ -7,23 +7,25 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; public class BoulangerieThreadSafe extends Boulangerie{ - private final BlockingQueue sweets = new ArrayBlockingQueue(50); + private final BlockingQueue sweets = new ArrayBlockingQueue(10); @Override - public void depose(Patisserie p) { + public boolean depose(Patisserie p) { try{ + if(sweets.remainingCapacity() <= 0) return false; sweets.put(p); - }catch(InterruptedException ignored){} + }catch(InterruptedException ignored){return false;} + return true; } @Override public Patisserie achete() { - try{return sweets.take();} catch (InterruptedException e) {} + try{return sweets.take();} catch (InterruptedException ignored) {} return null; } @Override - public void getStock() { - // TODO implement here + public int getStock() { + return sweets.size(); } } diff --git a/src/sweet/Client.java b/src/sweet/Client.java index 6d0c75e..c297a60 100644 --- a/src/sweet/Client.java +++ b/src/sweet/Client.java @@ -15,8 +15,8 @@ public class Client implements Runnable { @Override public void run() { - while(true) { - local.achete(); + while(local.getStock() < 9999) { + if(local.achete() == Gateau.GATEAU_EMPOISONNE) break; System.out.println("J'ai acheté ma patisserie"); try { Thread.sleep(80); diff --git a/src/sweet/Gateau.java b/src/sweet/Gateau.java index 0b6e045..40013ad 100644 --- a/src/sweet/Gateau.java +++ b/src/sweet/Gateau.java @@ -8,7 +8,7 @@ import java.util.*; * */ public class Gateau extends Patisserie { - + public static final Gateau GATEAU_EMPOISONNE = new Gateau(); /** * Default constructor */ diff --git a/src/sweet/LimitedClient.java b/src/sweet/LimitedClient.java index 72e908c..b43e824 100644 --- a/src/sweet/LimitedClient.java +++ b/src/sweet/LimitedClient.java @@ -1,6 +1,7 @@ package sweet; public class LimitedClient extends Client{ + private int consumed = 0; public LimitedClient(Boulangerie b) { super(b); } @@ -9,6 +10,8 @@ public class LimitedClient extends Client{ public void run() { while(true) { local.achete(); + consumed++; + if(consumed > 10) break; System.out.println("J'ai acheté ma patisserie - Limited"); try { Thread.sleep(80); diff --git a/src/sweet/Patissier.java b/src/sweet/Patissier.java index 8112f73..5a419be 100644 --- a/src/sweet/Patissier.java +++ b/src/sweet/Patissier.java @@ -9,7 +9,7 @@ import java.util.concurrent.atomic.AtomicBoolean; */ public class Patissier implements Runnable { public AtomicBoolean shouldRun = new AtomicBoolean(true); - private final Boulangerie local; + protected final Boulangerie local; /** * Default constructor */ @@ -20,7 +20,9 @@ public class Patissier implements Runnable { @Override public void run() { while(shouldRun.get()) { - local.depose(new Patisserie()); + if(!local.depose(new Patisserie())){ + shouldRun.set(false); + } System.out.println("J'ai produit ma patisserie"); try { Thread.sleep(100); diff --git a/src/sweet/PatissierSuicidal.java b/src/sweet/PatissierSuicidal.java new file mode 100644 index 0000000..120fc23 --- /dev/null +++ b/src/sweet/PatissierSuicidal.java @@ -0,0 +1,31 @@ +package sweet; + +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * + */ +public class PatissierSuicidal extends Patissier { + public AtomicBoolean shouldRun = new AtomicBoolean(true); + /** + * Default constructor + */ + public PatissierSuicidal(Boulangerie b) { + super(b); + } + + @Override + public void run() { + while(shouldRun.get()) { + if(!local.depose(new Patisserie())){ + shouldRun.set(false); + } + System.out.println("J'ai produit ma patisserie"); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + break; + } + } + } +} \ No newline at end of file