Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пример программного кода

.pdf
Скачиваний:
8
Добавлен:
02.06.2015
Размер:
144.99 Кб
Скачать

Многопоточное приложение

Многопоточное приложение (продолжение)

Класс 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