From 177fef2b50776b0f5578b6a2a2b353bf77eab790 Mon Sep 17 00:00:00 2001 From: David Date: Sat, 22 Apr 2017 19:59:42 +0300 Subject: [PATCH 1/4] ThreadPool task --- ThreadPool/.idea/misc.xml | 6 + ThreadPool/.idea/modules.xml | 8 + ThreadPool/.idea/workspace.xml | 890 ++++++++++++++++++ ThreadPool/ThreadPool.iml | 11 + .../production/ThreadPool/CustomQueue.class | Bin 0 -> 282 bytes .../out/production/ThreadPool/MyQueue.class | Bin 0 -> 1221 bytes .../out/production/ThreadPool/Task.class | Bin 0 -> 835 bytes .../production/ThreadPool/ThreadPool.class | Bin 0 -> 2883 bytes .../out/production/ThreadPool/Worker.class | Bin 0 -> 1544 bytes ThreadPool/src/CustomQueue.java | 4 + ThreadPool/src/MyQueue.java | 34 + ThreadPool/src/Task.java | 18 + ThreadPool/src/ThreadPool.java | 61 ++ ThreadPool/src/Worker.java | 27 + 14 files changed, 1059 insertions(+) create mode 100644 ThreadPool/.idea/misc.xml create mode 100644 ThreadPool/.idea/modules.xml create mode 100644 ThreadPool/.idea/workspace.xml create mode 100644 ThreadPool/ThreadPool.iml create mode 100644 ThreadPool/out/production/ThreadPool/CustomQueue.class create mode 100644 ThreadPool/out/production/ThreadPool/MyQueue.class create mode 100644 ThreadPool/out/production/ThreadPool/Task.class create mode 100644 ThreadPool/out/production/ThreadPool/ThreadPool.class create mode 100644 ThreadPool/out/production/ThreadPool/Worker.class create mode 100644 ThreadPool/src/CustomQueue.java create mode 100644 ThreadPool/src/MyQueue.java create mode 100644 ThreadPool/src/Task.java create mode 100644 ThreadPool/src/ThreadPool.java create mode 100644 ThreadPool/src/Worker.java diff --git a/ThreadPool/.idea/misc.xml b/ThreadPool/.idea/misc.xml new file mode 100644 index 0000000..0548357 --- /dev/null +++ b/ThreadPool/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ThreadPool/.idea/modules.xml b/ThreadPool/.idea/modules.xml new file mode 100644 index 0000000..62b0e16 --- /dev/null +++ b/ThreadPool/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ThreadPool/.idea/workspace.xml b/ThreadPool/.idea/workspace.xml new file mode 100644 index 0000000..1136a80 --- /dev/null +++ b/ThreadPool/.idea/workspace.xml @@ -0,0 +1,890 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1492470884929 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No facets are configured + + + + + + + + + + + + + + + 1.8 + + + + + + + + ThreadPool + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ThreadPool/ThreadPool.iml b/ThreadPool/ThreadPool.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/ThreadPool/ThreadPool.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ThreadPool/out/production/ThreadPool/CustomQueue.class b/ThreadPool/out/production/ThreadPool/CustomQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..efbdb09cb28880382bb3810031d138b1f2f0a538 GIT binary patch literal 282 zcmZXP&kn&r7{uqJy4w18;2pLXy*ME*!bu`habLA*+Eg3W^>7Xzz(a{GBBICn%}l=e z?vLvYzzAK2HbaNNWO`CkNy31yVsQ~(BGS-X?_(Jh6L&|j{3uLCp>mxu`F8Pw>>xk2 zK6k4n*K|1h1)+7*W`a7Uz Z5b7|rZj=h9)(p+BwlsS?Hk?*%fP}|oJ^{iu?mFx=<%1P+oGIuTAb{fRv=ka{8 zm@6=;H*Z>|U62q+rnV&n*K1{_M>W$jo;uYXqfyj%DvS(iwUS=h)*GhS`@x{SXEsTs zZMNE^@w0iYdOJ7LPHHnNhUJSNO?v7oy0x2qwzF@P?3^pc)|&@{+U>0yrCjQ#`Xncj zs+0}C*hn&UQNC;}OGtDfPb}MLG@QC^ls7(sELI%Yvh~uzre1ejbZuUt&B>I@ zx0)}mcGd8;7XA-u>rT_IRb5xw4TrXBPNQTzHie(6Z`qRQO~nv~C5&|Lkp3SSWzB5b zDk6v~xUXUrITd*ft9XEdiihIJOvjpw8dC8H^K{22lMw6Vd*UU8yQK2wI~rW^bXqT$ zC0uw%Z+Q1s%{Je*)+!a!n9Yr9-EO&$iCFNxZrZ%0hEc5@8kpm|RzZvTmqk~cV|@QI z1`*(z9&j9CCV(Ak|>F96SRRF9Aa)ETD6D60yFxOc{95M0xkA*PVAci literal 0 HcmV?d00001 diff --git a/ThreadPool/out/production/ThreadPool/Task.class b/ThreadPool/out/production/ThreadPool/Task.class new file mode 100644 index 0000000000000000000000000000000000000000..5ad8ecd1df5dd7035bd0f8c63813ec7f08708e00 GIT binary patch literal 835 zcmZuv*>2N76g}g(^@3?j(o#z3!kz@ESqeN9@e*1oC~A=$^6t1pnc~=yGe+a(@VMCn?ZYeHeT0x#ym{%>DKIdmq3O9^0^S$%2Jh3v-w^v0&peu2{H= zYc_qZo48@%rh$@yGJ`Hfn=`N)!{`$c3Hg+;Qmx#iUp3w!*LYn-d@XIac+&7&AtCvC z9Qa|=PlU1$L0!HUT@tA`{O+4&1~U||cw->06FX#>ES2k9{#)M-{bO9(+7Tr)E_mhKZ8}GRzL3REp3I;wVUy zgh$e?QcJ^W%>56kMUp2;+L3(YUsDXZlA7ibW$%4g@-{i*R5DBrhazJ4MIs{U$%OlD znoD7zdmLskI*JrV6jwSjO^OoH=CVq3dcEo;UefcDg11s#Uwh^;%nt=lw)U4wHH>sa z&O2%&o|l`nMiwm>!x=i7dI{P%jm{Xx37MeVD%lFLEBj!T;x4qW1J1btD@R`gI!w~B zkSFW>kc|Q+$)Y$+kt(etd8WyyG(F_V24=UB%j*~VyP2ik`{7z#28Vm%^gP-*g% g03>2kSp_PrNFpkgGZZ;Yb%79_kQq7`>8_#p2TYyCA^-pY literal 0 HcmV?d00001 diff --git a/ThreadPool/out/production/ThreadPool/ThreadPool.class b/ThreadPool/out/production/ThreadPool/ThreadPool.class new file mode 100644 index 0000000000000000000000000000000000000000..587089b18264c3650f73b94148230d6eaf8f0ad0 GIT binary patch literal 2883 zcmai0`EwIx7=AX_CUMJAD2K%oK;{jc!C$+ zH=b2zoKc1*j2Y1xfAgo!U*Z42Fyiy>ZkwQ;aWeBA@An?h`@HY>ZT|fGm-7JD z_e3K=}2LQf+eY(_+qO>@YlVc=02MpcZdFlBi#jV2sQLqlH0cpCF@APGxm zTLvC$D9G@bcywea%GOPxgu_WZp2iVONa!cT-IFSwl2}ixct$jyO=BgVOX7K%k0xmzxicM}cOAWl(1OM~_n$I&PH z&7w<<&e`Ol>%4A__U!YK`rZ;7P0MsQDTsCSbq;abX6J}#Zog?61Euj1!`Ua1nO?u0 z)$>ETW6C}h#@sQJK(zkAqvX!`$?Q!2bHw|We15;}95NiLMmr=*BFI6!`Uy9pB59_A z1q}y%mTQa}4m~#wx_b7|PQBpASMf6GD7tom5fr40rIB&d-KQ51DOlOjK*DTP3Jk?j zu>61YNXfWvS_&3*JkWq?&~;2}wAZK1HOEO%%=H5&vSYTHmA&qaGT{ZYSdj*+G)}|; z4MLlONHIH;w%-7QS>3Xjwu(J$Np>R*wjaqF1=qB#qKa2kyh_oaU2?L<4pWLWw_b-e zLac_Hu$df%ZKt6J*E2}H$!6L{!wp!kp&M&7Y{F(ztKkGrYIqH=E1381DzSt?Nj1EI zHzmwlGMrMdxUL#-w6$dBa|W4C1>iE>84Yja9S!f|Jq_<;vxX1wp@xs}v4&41_NN*? z!{@ZP)3$S&kqKjkiqjgt5dAOlm4>hJ4KuGNE3t1@Fu$HyNS=moF)63tDH!lh)lPUn zdsDUNymPgq-qePSch);k$xq%HkJxBkSX$5TecHYm^QG+@y zm$MO`vl~f9K=@_V8k{J)1}}5eE{Smf)3keb^MP;)-q6PhF}QP=iwV3SN_oC6s$o4A zd?aQC#}twU-6InL*LaB~mNk|PbG#&`?s%0E;=@~2dHCxS3 zaum(-6mS)hCj$!B`s;Pv^PQO4-^g!iMD89Xw@@Qb%LwPIyDCt+s)!6%5S>Dd%Q%;b zDX3koQ%LeS^|SBsR*qL9!BImDDa=Kh`z9>M9IWDQ15XwOKGBPf+|fI3BQ~ZhFI5=% z5BiAm?7`?cr2DTck9H8t0Eb&oisN2rp z?L3W;ry*>`HliiQFq1pDz5cC0VIy?^K+rQwn{!n{HmgJ?N({J4CsKtR!hQmI&)K=Ny*b zRz+rbSp_Rtt(C)Pu&RQqH^d~hYna;7SQ*#e6mN;gPGgk_+h>G{DmsQ+5*2iAP`j6^ z6?C=4!BqlGNuk*5%)sl?k{O{I;PFAan*tTv2FZS{@ z!nk`eNMBJ#-+_HBdkoSEZHQf>h`lhxc2HF8S8*S35$jnKErMa{Bxrv>Jt^!VxtkCD E0|Xe#H2?qr literal 0 HcmV?d00001 diff --git a/ThreadPool/out/production/ThreadPool/Worker.class b/ThreadPool/out/production/ThreadPool/Worker.class new file mode 100644 index 0000000000000000000000000000000000000000..de698835ca2914cc5e3259d643a333ffedeac0e7 GIT binary patch literal 1544 zcmah}OLNm!6#lLqB0mJ7E+KtERG{EEBnFzkNSXjCuha>&W?;HhY)w!iORkVQ&92if zy6B=a-Sj7P3mNPHnYdkdb^RauAJ_rkwd6zrrdZ>9ug*Q^JKuTf-)B!c0H$y=hXN+D zcngziDd%toXEmJ5;$uu{_#_7n6B&G}_RrMvc@AITd>;ESoxzNTFEg0cFsI>yhKmAP zWBr@Z3N3+bWidKV^IWx8Tr&uL%1eFuOl8&l!7PV??UZYtTMK>Pa)a``={V-HV@=P} zaKJSiv?)ZYj_IzHtATI3E4&+=v0Xcu6*yY#Lr%Y{H+GvS^In}OLlxV#mcque<=;{s z6s}h@o!h2wtM^zq5Ztxz31ljFJb%sd>FMxZwe@CSb#BM=n}c~hwX`3)0_mcnDSUy^ zHzb8xFFhEaw)W(y2T*Q8uCwhUp|!gyT5jSG34Lf zpX4LC-Thr|@kMsJKg*7MVw^W_-SsWAZcG?DuHm|l1$?ccqGJ(DI&LU3Q!hbnbbnI_ za!YO#G6|PJ6L@=<+fIH2t{U=>gng@r(K6&_pR9aj$OqKelAVZki_AB8yDd9=@CTzr z3LM;ZbYpqdss(JSUD3Cp>qecX#lye}saxMi6LP3HmZ)Q7&LSottLygytHJ*8LITHC zx4rUBjzGXcu*`-U1hd(++`7O-F@YD)Nzz3mipxa9OyET#fxTQ}+kPJRdSnPq<=#$pAVDM0X=QRF3g<94ELc z0{;;w#oaAEM5>K}f3UBzfx#_k-)$mO$hMK=O`2O9`8M?N$Jj4$C!uoSWtG34x04VD zU%6NDDP9Zg`=L0_lZ*{aU!D=4Vge@_&jKS^WD=K{#8sxS!Nm1r&tncB;UsaEn1fR& a_7L4TA7jMI5&0=98cL(Q8>b|N(=PyYnx!28 literal 0 HcmV?d00001 diff --git a/ThreadPool/src/CustomQueue.java b/ThreadPool/src/CustomQueue.java new file mode 100644 index 0000000..1592168 --- /dev/null +++ b/ThreadPool/src/CustomQueue.java @@ -0,0 +1,4 @@ +public interface CustomQueue { + void enqueue(E e); + E dequeue(); +} diff --git a/ThreadPool/src/MyQueue.java b/ThreadPool/src/MyQueue.java new file mode 100644 index 0000000..e63ffcb --- /dev/null +++ b/ThreadPool/src/MyQueue.java @@ -0,0 +1,34 @@ +import java.util.LinkedList; +import java.util.Queue; + +public class MyQueue implements CustomQueue { + + private Queue queue = new LinkedList(); + + /** + * Добавляет задачу в очередь и оповещает потоки + */ + @Override + public synchronized void enqueue(T task) { + queue.add(task); + // Wake up anyone waiting on the queue to put some item. + notifyAll(); + } + + /** + * Возвращаем задачу из очереди или ждем, пока она там появится + */ + @Override + public synchronized T dequeue() { + T task = null; + while (queue.isEmpty()) { + try { + wait(); + } catch (InterruptedException e1) { + return task; + } + } + task = queue.remove(); + return task; + } +} diff --git a/ThreadPool/src/Task.java b/ThreadPool/src/Task.java new file mode 100644 index 0000000..a6ced00 --- /dev/null +++ b/ThreadPool/src/Task.java @@ -0,0 +1,18 @@ +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; + +public class Task implements Callable { + private int time; + + Task(int lifeTime) { + time = lifeTime; + } + + @Override + public Object call() throws InterruptedException { + System.out.println("Начало задачи"); + TimeUnit.SECONDS.sleep(time); + System.out.println("Конец задачи"); + return null; + } +} diff --git a/ThreadPool/src/ThreadPool.java b/ThreadPool/src/ThreadPool.java new file mode 100644 index 0000000..01ca1dc --- /dev/null +++ b/ThreadPool/src/ThreadPool.java @@ -0,0 +1,61 @@ +import java.util.ArrayList; +import java.util.Scanner; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; + +public class ThreadPool { + + private final int threadPoolCapacity; + private MyQueue myQueue = new MyQueue(); + private ArrayList threads = new ArrayList(); + + private ThreadPool(int capacity) { + this.threadPoolCapacity = capacity; + initAllWorkers(); + } + + private void initAllWorkers() { + for (Integer i = 0; i < threadPoolCapacity; ++i) { + Thread thread = new Thread(new Worker(myQueue, i.toString())); + thread.setName("Thread - " + i.toString()); + thread.start(); + threads.add(thread); + } + } + + private void stopAll() { + for (int i = 0; i < threadPoolCapacity; ++i) { + threads.get(i).interrupt(); + } + System.out.println("Good bye!"); + } + + private void submitTask(Callable r) { + myQueue.enqueue(r); + } + + public static void main(String... args) throws InterruptedException, ExecutionException { + + Integer i = 3; + int num = Integer.parseInt(i.toString());//args[0]); + ThreadPool threadPool = new ThreadPool(num); + Scanner sc = new Scanner(System.in); + + while (true) { + System.out.println("Выберите: добавить задачу в пул - 1 \n выход - 2"); + int choice = sc.nextInt(); + + if (choice == 1) { + System.out.println("Введите длительность задачи"); + int time = sc.nextInt(); + Callable task = new Task(time); + threadPool.submitTask(task); + } + + if (choice == 2) { + threadPool.stopAll(); + break; + } + } + } +} \ No newline at end of file diff --git a/ThreadPool/src/Worker.java b/ThreadPool/src/Worker.java new file mode 100644 index 0000000..ff2b188 --- /dev/null +++ b/ThreadPool/src/Worker.java @@ -0,0 +1,27 @@ +import java.util.concurrent.Callable; + +public class Worker implements Runnable { + private MyQueue myQueue; + private String name; + + Worker(MyQueue myQueue, String name){ + this.myQueue = myQueue; + this.name = name; + } + + @Override + public void run() { + + while (true) { + try { + Callable r = myQueue.dequeue(); + System.out.println(" Задачу принял поток : Thread - " + this.name); + r.call(); + System.out.println(" Задачу выполнил поток: Thread - " + this.name); + } catch (Exception e) { + System.out.println(" Выполнение задачи было прервано: Thread - " + this.name); + break; + } + } + } +} From e84a39ebf332b1bbcdd55842717767e68d4397c6 Mon Sep 17 00:00:00 2001 From: David Date: Sun, 23 Apr 2017 00:10:32 +0300 Subject: [PATCH 2/4] Binary files deleted --- ThreadPool/.idea/workspace.xml | 153 ++++++++++-------- .../production/ThreadPool/CustomQueue.class | Bin 282 -> 0 bytes .../out/production/ThreadPool/MyQueue.class | Bin 1221 -> 0 bytes .../out/production/ThreadPool/Task.class | Bin 835 -> 0 bytes .../production/ThreadPool/ThreadPool.class | Bin 2883 -> 0 bytes .../out/production/ThreadPool/Worker.class | Bin 1544 -> 0 bytes ThreadPool/src/MyQueue.java | 1 - ThreadPool/src/ThreadPool.java | 6 +- 8 files changed, 85 insertions(+), 75 deletions(-) delete mode 100644 ThreadPool/out/production/ThreadPool/CustomQueue.class delete mode 100644 ThreadPool/out/production/ThreadPool/MyQueue.class delete mode 100644 ThreadPool/out/production/ThreadPool/Task.class delete mode 100644 ThreadPool/out/production/ThreadPool/ThreadPool.class delete mode 100644 ThreadPool/out/production/ThreadPool/Worker.class diff --git a/ThreadPool/.idea/workspace.xml b/ThreadPool/.idea/workspace.xml index 1136a80..8106dbe 100644 --- a/ThreadPool/.idea/workspace.xml +++ b/ThreadPool/.idea/workspace.xml @@ -19,12 +19,10 @@ - - + + - - @@ -33,8 +31,8 @@ - - + + @@ -43,11 +41,12 @@ - - + + + @@ -56,8 +55,8 @@ - - + + @@ -68,8 +67,8 @@ - - + + @@ -98,8 +97,8 @@ @@ -132,6 +131,8 @@ + + @@ -160,8 +161,6 @@ - - @@ -171,7 +170,7 @@ - + @@ -607,32 +606,32 @@ 1492470884929 + - - + - - + - + @@ -644,6 +643,7 @@ + @@ -656,7 +656,7 @@ - @@ -671,57 +671,40 @@ - - - - + + - - + + + - - - - - - - - - - + + - - - - - - - - @@ -730,38 +713,48 @@ - + - - - + + + + + - + - - + + - + - - - + + + + + + + - + + - - - + + + + + + @@ -770,29 +763,49 @@ + + + + + + + + + + + - - + + - - + + + + + + + + + + + - - + + @@ -801,12 +814,10 @@ - - + + - - diff --git a/ThreadPool/out/production/ThreadPool/CustomQueue.class b/ThreadPool/out/production/ThreadPool/CustomQueue.class deleted file mode 100644 index efbdb09cb28880382bb3810031d138b1f2f0a538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmZXP&kn&r7{uqJy4w18;2pLXy*ME*!bu`habLA*+Eg3W^>7Xzz(a{GBBICn%}l=e z?vLvYzzAK2HbaNNWO`CkNy31yVsQ~(BGS-X?_(Jh6L&|j{3uLCp>mxu`F8Pw>>xk2 zK6k4n*K|1h1)+7*W`a7Uz Z5b7|rZj=h9)(p+BwlsS?Hk?*%fP}|oJ^{iu?mFx=<%1P+oGIuTAb{fRv=ka{8 zm@6=;H*Z>|U62q+rnV&n*K1{_M>W$jo;uYXqfyj%DvS(iwUS=h)*GhS`@x{SXEsTs zZMNE^@w0iYdOJ7LPHHnNhUJSNO?v7oy0x2qwzF@P?3^pc)|&@{+U>0yrCjQ#`Xncj zs+0}C*hn&UQNC;}OGtDfPb}MLG@QC^ls7(sELI%Yvh~uzre1ejbZuUt&B>I@ zx0)}mcGd8;7XA-u>rT_IRb5xw4TrXBPNQTzHie(6Z`qRQO~nv~C5&|Lkp3SSWzB5b zDk6v~xUXUrITd*ft9XEdiihIJOvjpw8dC8H^K{22lMw6Vd*UU8yQK2wI~rW^bXqT$ zC0uw%Z+Q1s%{Je*)+!a!n9Yr9-EO&$iCFNxZrZ%0hEc5@8kpm|RzZvTmqk~cV|@QI z1`*(z9&j9CCV(Ak|>F96SRRF9Aa)ETD6D60yFxOc{95M0xkA*PVAci diff --git a/ThreadPool/out/production/ThreadPool/Task.class b/ThreadPool/out/production/ThreadPool/Task.class deleted file mode 100644 index 5ad8ecd1df5dd7035bd0f8c63813ec7f08708e00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmZuv*>2N76g}g(^@3?j(o#z3!kz@ESqeN9@e*1oC~A=$^6t1pnc~=yGe+a(@VMCn?ZYeHeT0x#ym{%>DKIdmq3O9^0^S$%2Jh3v-w^v0&peu2{H= zYc_qZo48@%rh$@yGJ`Hfn=`N)!{`$c3Hg+;Qmx#iUp3w!*LYn-d@XIac+&7&AtCvC z9Qa|=PlU1$L0!HUT@tA`{O+4&1~U||cw->06FX#>ES2k9{#)M-{bO9(+7Tr)E_mhKZ8}GRzL3REp3I;wVUy zgh$e?QcJ^W%>56kMUp2;+L3(YUsDXZlA7ibW$%4g@-{i*R5DBrhazJ4MIs{U$%OlD znoD7zdmLskI*JrV6jwSjO^OoH=CVq3dcEo;UefcDg11s#Uwh^;%nt=lw)U4wHH>sa z&O2%&o|l`nMiwm>!x=i7dI{P%jm{Xx37MeVD%lFLEBj!T;x4qW1J1btD@R`gI!w~B zkSFW>kc|Q+$)Y$+kt(etd8WyyG(F_V24=UB%j*~VyP2ik`{7z#28Vm%^gP-*g% g03>2kSp_PrNFpkgGZZ;Yb%79_kQq7`>8_#p2TYyCA^-pY diff --git a/ThreadPool/out/production/ThreadPool/ThreadPool.class b/ThreadPool/out/production/ThreadPool/ThreadPool.class deleted file mode 100644 index 587089b18264c3650f73b94148230d6eaf8f0ad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2883 zcmai0`EwIx7=AX_CUMJAD2K%oK;{jc!C$+ zH=b2zoKc1*j2Y1xfAgo!U*Z42Fyiy>ZkwQ;aWeBA@An?h`@HY>ZT|fGm-7JD z_e3K=}2LQf+eY(_+qO>@YlVc=02MpcZdFlBi#jV2sQLqlH0cpCF@APGxm zTLvC$D9G@bcywea%GOPxgu_WZp2iVONa!cT-IFSwl2}ixct$jyO=BgVOX7K%k0xmzxicM}cOAWl(1OM~_n$I&PH z&7w<<&e`Ol>%4A__U!YK`rZ;7P0MsQDTsCSbq;abX6J}#Zog?61Euj1!`Ua1nO?u0 z)$>ETW6C}h#@sQJK(zkAqvX!`$?Q!2bHw|We15;}95NiLMmr=*BFI6!`Uy9pB59_A z1q}y%mTQa}4m~#wx_b7|PQBpASMf6GD7tom5fr40rIB&d-KQ51DOlOjK*DTP3Jk?j zu>61YNXfWvS_&3*JkWq?&~;2}wAZK1HOEO%%=H5&vSYTHmA&qaGT{ZYSdj*+G)}|; z4MLlONHIH;w%-7QS>3Xjwu(J$Np>R*wjaqF1=qB#qKa2kyh_oaU2?L<4pWLWw_b-e zLac_Hu$df%ZKt6J*E2}H$!6L{!wp!kp&M&7Y{F(ztKkGrYIqH=E1381DzSt?Nj1EI zHzmwlGMrMdxUL#-w6$dBa|W4C1>iE>84Yja9S!f|Jq_<;vxX1wp@xs}v4&41_NN*? z!{@ZP)3$S&kqKjkiqjgt5dAOlm4>hJ4KuGNE3t1@Fu$HyNS=moF)63tDH!lh)lPUn zdsDUNymPgq-qePSch);k$xq%HkJxBkSX$5TecHYm^QG+@y zm$MO`vl~f9K=@_V8k{J)1}}5eE{Smf)3keb^MP;)-q6PhF}QP=iwV3SN_oC6s$o4A zd?aQC#}twU-6InL*LaB~mNk|PbG#&`?s%0E;=@~2dHCxS3 zaum(-6mS)hCj$!B`s;Pv^PQO4-^g!iMD89Xw@@Qb%LwPIyDCt+s)!6%5S>Dd%Q%;b zDX3koQ%LeS^|SBsR*qL9!BImDDa=Kh`z9>M9IWDQ15XwOKGBPf+|fI3BQ~ZhFI5=% z5BiAm?7`?cr2DTck9H8t0Eb&oisN2rp z?L3W;ry*>`HliiQFq1pDz5cC0VIy?^K+rQwn{!n{HmgJ?N({J4CsKtR!hQmI&)K=Ny*b zRz+rbSp_Rtt(C)Pu&RQqH^d~hYna;7SQ*#e6mN;gPGgk_+h>G{DmsQ+5*2iAP`j6^ z6?C=4!BqlGNuk*5%)sl?k{O{I;PFAan*tTv2FZS{@ z!nk`eNMBJ#-+_HBdkoSEZHQf>h`lhxc2HF8S8*S35$jnKErMa{Bxrv>Jt^!VxtkCD E0|Xe#H2?qr diff --git a/ThreadPool/out/production/ThreadPool/Worker.class b/ThreadPool/out/production/ThreadPool/Worker.class deleted file mode 100644 index de698835ca2914cc5e3259d643a333ffedeac0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1544 zcmah}OLNm!6#lLqB0mJ7E+KtERG{EEBnFzkNSXjCuha>&W?;HhY)w!iORkVQ&92if zy6B=a-Sj7P3mNPHnYdkdb^RauAJ_rkwd6zrrdZ>9ug*Q^JKuTf-)B!c0H$y=hXN+D zcngziDd%toXEmJ5;$uu{_#_7n6B&G}_RrMvc@AITd>;ESoxzNTFEg0cFsI>yhKmAP zWBr@Z3N3+bWidKV^IWx8Tr&uL%1eFuOl8&l!7PV??UZYtTMK>Pa)a``={V-HV@=P} zaKJSiv?)ZYj_IzHtATI3E4&+=v0Xcu6*yY#Lr%Y{H+GvS^In}OLlxV#mcque<=;{s z6s}h@o!h2wtM^zq5Ztxz31ljFJb%sd>FMxZwe@CSb#BM=n}c~hwX`3)0_mcnDSUy^ zHzb8xFFhEaw)W(y2T*Q8uCwhUp|!gyT5jSG34Lf zpX4LC-Thr|@kMsJKg*7MVw^W_-SsWAZcG?DuHm|l1$?ccqGJ(DI&LU3Q!hbnbbnI_ za!YO#G6|PJ6L@=<+fIH2t{U=>gng@r(K6&_pR9aj$OqKelAVZki_AB8yDd9=@CTzr z3LM;ZbYpqdss(JSUD3Cp>qecX#lye}saxMi6LP3HmZ)Q7&LSottLygytHJ*8LITHC zx4rUBjzGXcu*`-U1hd(++`7O-F@YD)Nzz3mipxa9OyET#fxTQ}+kPJRdSnPq<=#$pAVDM0X=QRF3g<94ELc z0{;;w#oaAEM5>K}f3UBzfx#_k-)$mO$hMK=O`2O9`8M?N$Jj4$C!uoSWtG34x04VD zU%6NDDP9Zg`=L0_lZ*{aU!D=4Vge@_&jKS^WD=K{#8sxS!Nm1r&tncB;UsaEn1fR& a_7L4TA7jMI5&0=98cL(Q8>b|N(=PyYnx!28 diff --git a/ThreadPool/src/MyQueue.java b/ThreadPool/src/MyQueue.java index e63ffcb..663e1be 100644 --- a/ThreadPool/src/MyQueue.java +++ b/ThreadPool/src/MyQueue.java @@ -11,7 +11,6 @@ public class MyQueue implements CustomQueue { @Override public synchronized void enqueue(T task) { queue.add(task); - // Wake up anyone waiting on the queue to put some item. notifyAll(); } diff --git a/ThreadPool/src/ThreadPool.java b/ThreadPool/src/ThreadPool.java index 01ca1dc..2430d80 100644 --- a/ThreadPool/src/ThreadPool.java +++ b/ThreadPool/src/ThreadPool.java @@ -10,7 +10,7 @@ public class ThreadPool { private ArrayList threads = new ArrayList(); private ThreadPool(int capacity) { - this.threadPoolCapacity = capacity; + threadPoolCapacity = capacity; initAllWorkers(); } @@ -36,8 +36,8 @@ private void submitTask(Callable r) { public static void main(String... args) throws InterruptedException, ExecutionException { - Integer i = 3; - int num = Integer.parseInt(i.toString());//args[0]); + int i = 3; + int num = i;//args[0]; ThreadPool threadPool = new ThreadPool(num); Scanner sc = new Scanner(System.in); From 46cc686db3b93734bddf427adbf98e8252670d44 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 17 May 2017 12:19:03 +0300 Subject: [PATCH 3/4] new ThreadPool --- .gitignore | 1 + ThreadPool/.idea/workspace.xml | 631 +++---------------------------- ThreadPool/src/CustomQueue.java | 4 - ThreadPool/src/MyQueue.java | 33 -- ThreadPool/src/MyThreadPool.java | 63 +++ ThreadPool/src/Task.java | 18 - ThreadPool/src/ThreadPool.java | 61 --- ThreadPool/src/Worker.java | 27 -- 8 files changed, 109 insertions(+), 729 deletions(-) create mode 100644 .gitignore delete mode 100644 ThreadPool/src/CustomQueue.java delete mode 100644 ThreadPool/src/MyQueue.java create mode 100644 ThreadPool/src/MyThreadPool.java delete mode 100644 ThreadPool/src/Task.java delete mode 100644 ThreadPool/src/ThreadPool.java delete mode 100644 ThreadPool/src/Worker.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ffd2a4a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.idea diff --git a/ThreadPool/.idea/workspace.xml b/ThreadPool/.idea/workspace.xml index 8106dbe..f4f29c0 100644 --- a/ThreadPool/.idea/workspace.xml +++ b/ThreadPool/.idea/workspace.xml @@ -1,7 +1,7 @@ - + - - - + + + - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -92,14 +47,7 @@ @@ -131,8 +79,8 @@ - + @@ -166,43 +114,11 @@ - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -464,61 +170,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -561,91 +206,56 @@ - - project - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1492470884929 + + 1495012445328 - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - + + + + + - - - + + + + @@ -655,169 +265,18 @@ - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/ThreadPool/src/CustomQueue.java b/ThreadPool/src/CustomQueue.java deleted file mode 100644 index 1592168..0000000 --- a/ThreadPool/src/CustomQueue.java +++ /dev/null @@ -1,4 +0,0 @@ -public interface CustomQueue { - void enqueue(E e); - E dequeue(); -} diff --git a/ThreadPool/src/MyQueue.java b/ThreadPool/src/MyQueue.java deleted file mode 100644 index 663e1be..0000000 --- a/ThreadPool/src/MyQueue.java +++ /dev/null @@ -1,33 +0,0 @@ -import java.util.LinkedList; -import java.util.Queue; - -public class MyQueue implements CustomQueue { - - private Queue queue = new LinkedList(); - - /** - * Добавляет задачу в очередь и оповещает потоки - */ - @Override - public synchronized void enqueue(T task) { - queue.add(task); - notifyAll(); - } - - /** - * Возвращаем задачу из очереди или ждем, пока она там появится - */ - @Override - public synchronized T dequeue() { - T task = null; - while (queue.isEmpty()) { - try { - wait(); - } catch (InterruptedException e1) { - return task; - } - } - task = queue.remove(); - return task; - } -} diff --git a/ThreadPool/src/MyThreadPool.java b/ThreadPool/src/MyThreadPool.java new file mode 100644 index 0000000..f73a393 --- /dev/null +++ b/ThreadPool/src/MyThreadPool.java @@ -0,0 +1,63 @@ +import java.util.ArrayList; +import java.util.LinkedList; + +public class MyThreadPool { + private final int numberOfThreads; + private ArrayList threads; + private final LinkedList tasks; + + public MyThreadPool(int numberOfThreads) { + this.numberOfThreads = numberOfThreads; + threads = new ArrayList<>(numberOfThreads); + tasks = new LinkedList<>(); + + for (int i = 0; i < numberOfThreads; ++i) { + threads.add(new MyThread()); + threads.get(i).start(); + } + } + + public class MyThread extends Thread { + @Override + public void run() { + Runnable r; + while (true) { + synchronized (tasks) { + while (tasks.isEmpty()) { + try { + tasks.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + r = tasks.removeFirst(); + } try { + r.run(); + } catch (RuntimeException e) { + e.printStackTrace(); + } + } + } + } + + private void execute(Runnable r) { + synchronized (tasks) { + tasks.addLast(r); + tasks.notify(); + } + } + + public static class Task implements Runnable { + @Override + public void run() { + System.out.println("Executed."); + } + } + + public static void main(String... args) { + MyThreadPool pool = new MyThreadPool(2); + for (int i = 0; i < 100; ++i) { + pool.execute(new Task()); + } + } +} \ No newline at end of file diff --git a/ThreadPool/src/Task.java b/ThreadPool/src/Task.java deleted file mode 100644 index a6ced00..0000000 --- a/ThreadPool/src/Task.java +++ /dev/null @@ -1,18 +0,0 @@ -import java.util.concurrent.Callable; -import java.util.concurrent.TimeUnit; - -public class Task implements Callable { - private int time; - - Task(int lifeTime) { - time = lifeTime; - } - - @Override - public Object call() throws InterruptedException { - System.out.println("Начало задачи"); - TimeUnit.SECONDS.sleep(time); - System.out.println("Конец задачи"); - return null; - } -} diff --git a/ThreadPool/src/ThreadPool.java b/ThreadPool/src/ThreadPool.java deleted file mode 100644 index 2430d80..0000000 --- a/ThreadPool/src/ThreadPool.java +++ /dev/null @@ -1,61 +0,0 @@ -import java.util.ArrayList; -import java.util.Scanner; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; - -public class ThreadPool { - - private final int threadPoolCapacity; - private MyQueue myQueue = new MyQueue(); - private ArrayList threads = new ArrayList(); - - private ThreadPool(int capacity) { - threadPoolCapacity = capacity; - initAllWorkers(); - } - - private void initAllWorkers() { - for (Integer i = 0; i < threadPoolCapacity; ++i) { - Thread thread = new Thread(new Worker(myQueue, i.toString())); - thread.setName("Thread - " + i.toString()); - thread.start(); - threads.add(thread); - } - } - - private void stopAll() { - for (int i = 0; i < threadPoolCapacity; ++i) { - threads.get(i).interrupt(); - } - System.out.println("Good bye!"); - } - - private void submitTask(Callable r) { - myQueue.enqueue(r); - } - - public static void main(String... args) throws InterruptedException, ExecutionException { - - int i = 3; - int num = i;//args[0]; - ThreadPool threadPool = new ThreadPool(num); - Scanner sc = new Scanner(System.in); - - while (true) { - System.out.println("Выберите: добавить задачу в пул - 1 \n выход - 2"); - int choice = sc.nextInt(); - - if (choice == 1) { - System.out.println("Введите длительность задачи"); - int time = sc.nextInt(); - Callable task = new Task(time); - threadPool.submitTask(task); - } - - if (choice == 2) { - threadPool.stopAll(); - break; - } - } - } -} \ No newline at end of file diff --git a/ThreadPool/src/Worker.java b/ThreadPool/src/Worker.java deleted file mode 100644 index ff2b188..0000000 --- a/ThreadPool/src/Worker.java +++ /dev/null @@ -1,27 +0,0 @@ -import java.util.concurrent.Callable; - -public class Worker implements Runnable { - private MyQueue myQueue; - private String name; - - Worker(MyQueue myQueue, String name){ - this.myQueue = myQueue; - this.name = name; - } - - @Override - public void run() { - - while (true) { - try { - Callable r = myQueue.dequeue(); - System.out.println(" Задачу принял поток : Thread - " + this.name); - r.call(); - System.out.println(" Задачу выполнил поток: Thread - " + this.name); - } catch (Exception e) { - System.out.println(" Выполнение задачи было прервано: Thread - " + this.name); - break; - } - } - } -} From 0d985697ac73fec0a7d3ee073883b02ffe7b891f Mon Sep 17 00:00:00 2001 From: David Date: Wed, 17 May 2017 12:32:35 +0300 Subject: [PATCH 4/4] Remove unneseccary --- ThreadPool/.idea/misc.xml | 6 - ThreadPool/.idea/modules.xml | 8 - ThreadPool/.idea/workspace.xml | 360 --------------------------------- 3 files changed, 374 deletions(-) delete mode 100644 ThreadPool/.idea/misc.xml delete mode 100644 ThreadPool/.idea/modules.xml delete mode 100644 ThreadPool/.idea/workspace.xml diff --git a/ThreadPool/.idea/misc.xml b/ThreadPool/.idea/misc.xml deleted file mode 100644 index 0548357..0000000 --- a/ThreadPool/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ThreadPool/.idea/modules.xml b/ThreadPool/.idea/modules.xml deleted file mode 100644 index 62b0e16..0000000 --- a/ThreadPool/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/ThreadPool/.idea/workspace.xml b/ThreadPool/.idea/workspace.xml deleted file mode 100644 index f4f29c0..0000000 --- a/ThreadPool/.idea/workspace.xml +++ /dev/null @@ -1,360 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - DEFINITION_ORDER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1495012445328 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No facets are configured - - - - - - - - - - - - - - - 1.8 - - - - - - - - ThreadPool - - - - - - - - - - - - - - - \ No newline at end of file