Пример программного кода
.pdfМногопоточное приложение
Многопоточное приложение (продолжение)
Класс Prime
26 |
p u b l i c s t a t i c v o i d |
main ( S t r i n g [ ] |
a r g s ) { |
|||
27 |
i f ( a r g s . l e n g t h != 3) { |
|
||||
28 |
|
|
System . e r r . p r i n t l n ( " I n v a l i d |
|||
|
|
|
|
parameters count " ) ; |
||
29 |
|
|
r e t u r n ; |
|
|
|
30 |
} |
|
|
|
|
|
31 |
i n t |
from |
= |
I n t e g e r . valueOf ( a r g s [ 0 ] ) ; |
||
32 |
i n t to = I n t e g e r . valueOf ( a r g s [ 1 ] ) ; |
|||||
33 |
i n t count = I n t e g e r . valueOf ( a r g s [ 2 ] ) ; |
|||||
34 |
Prime [ ] |
t h r e a d s = new |
Prime [ count ] ; |
|||
35 |
i n t |
s i z e |
= |
( to from |
+ 1) / count + ( ( ( to |
|
36 |
. . . |
from + |
1) % count |
== |
0) ? 0 : 1) ; |
|
|
|
|
|
|
Г.А. Чистяков (ВятГУ) |
РПС |
10 сентября 2014 г. |
11 / 13 |
Многопоточное приложение
Многопоточное приложение (продолжение)
Класс Prime
37 |
. . . |
|
|
|
38 |
f o r ( i n t i = 0 ; |
i < |
count ; |
i ++) |
39 |
t h r e a d s [ i ] |
= new |
Prime ( from |
|
|
i , Math . min ( to , from + |
|||
|
+ |
1) ) ) ; |
|
+ s i z e |
|
s i z e |
( i |
40 |
t r y { |
|
41 |
f o r ( i n t i = 0 ; i < count ; |
i ++) |
42 |
t h r e a d s [ i ] . th . j o i n ( ) ; |
|
43 |
} catch ( I n t e r r u p t e d E x c e p t i o n e ) { |
|
44 |
System . e r r . p r i n t l n ( " E r r o r |
w h i l e |
|
imlpements t h r e a d . " ) ; |
|
45 |
r e t u r n ; |
|
46 |
} |
|
47 |
i f ( ( from <= 1) && ( to >= 1) ) |
|
48 |
global Res ; |
|
49 |
System . out . p r i n t l n ( g l o b a l R e s ) ; |
|
50}
51}
Г.А. Чистяков (ВятГУ) |
РПС |
10 сентября 2014 г. |
12 / 13 |
Многопоточное приложение
Решение проблемы синхронизации
Разграничение по доступу
1 |
import j a v a . u t i l . c o n c u r r e n t . atomic . A t o m i c I n t e g e r ; |
2 |
|
3 |
// s t a t i c i n t g l o b a l R e s = 0 ; |
4 |
s t a t i c A t o m i c I n t e g e r g l o b a l R e s = new A t o m i c I n t e g e r (0) ; |
5 |
|
6 |
// g l o b a l R e s += l o c a l R e s ; |
7 |
g l o b a l R e s . addAndGet ( l o c a l R e s ) ; |
8 |
|
9// g l o b a l R e s ;
10 g l o b a l R e s . decrementAndGet ( ) ;
Г.А. Чистяков (ВятГУ) |
РПС |
10 сентября 2014 г. |
13 / 13 |