Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
javab_20230617
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
javab_20230617
Commits
e680e29f
Commit
e680e29f
authored
Jun 17, 2023
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Suma tablicy wielowątkowo - różne przykłady
parent
5ae24a87
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
234 additions
and
0 deletions
+234
-0
SumaTablicy2.java
PC21-JavaUzupelnienia/src/watki/podstawy/SumaTablicy2.java
+52
-0
SumaTablicyAtomic.java
...avaUzupelnienia/src/watki/podstawy/SumaTablicyAtomic.java
+49
-0
SumaTablicyAtomicWolno.java
...upelnienia/src/watki/podstawy/SumaTablicyAtomicWolno.java
+45
-0
SumaTablicyBezWatkow.java
...Uzupelnienia/src/watki/podstawy/SumaTablicyBezWatkow.java
+25
-0
SumaWieleWatkow.java
...-JavaUzupelnienia/src/watki/podstawy/SumaWieleWatkow.java
+63
-0
No files found.
PC21-JavaUzupelnienia/src/watki/podstawy/SumaTablicy2.java
0 → 100644
View file @
e680e29f
package
watki
.
podstawy
;
import
java.util.Arrays
;
public
class
SumaTablicy2
{
public
static
void
main
(
String
[]
args
)
{
final
int
SIZE
=
1000_000
;
int
[]
t
=
new
int
[
SIZE
];
Arrays
.
fill
(
t
,
5
);
System
.
out
.
println
(
"Mam tablicę"
);
// Stwórz dwa wątki, z których każdy obliczy sumę z połowy tej tablicy:
// od 0 do 499_999 a drugi od 500_000 do 999_999
// (mogą wypisać swoje wyniki)
// (to będzie trudniejsze) - potem oblicza jest suma tych dwóch połówek, aby uzyskać sumę całej tablicy
long
wyniki
[]
=
new
long
[
2
];
Thread
watek1
=
new
Thread
(()
->
{
long
suma
=
0
;
for
(
int
i
=
0
;
i
<
t
.
length
/
2
;
i
++)
{
suma
+=
t
[
i
];
}
System
.
out
.
println
(
suma
);
wyniki
[
0
]
=
suma
;
});
Thread
watek2
=
new
Thread
(()
->
{
long
suma
=
0
;
for
(
int
i
=
t
.
length
/
2
;
i
<
t
.
length
;
i
++)
{
suma
+=
t
[
i
];
}
System
.
out
.
println
(
suma
);
wyniki
[
1
]
=
suma
;
});
watek1
.
start
();
watek2
.
start
();
try
{
watek1
.
join
();
watek2
.
join
();
}
catch
(
InterruptedException
e
)
{
}
// gdy oba wątki zakończone, można zsumować tablicę wyników
long
sumaGlobalna
=
wyniki
[
0
]
+
wyniki
[
1
];
System
.
out
.
println
(
"Suma ostateczna: "
+
sumaGlobalna
);
}
}
PC21-JavaUzupelnienia/src/watki/podstawy/SumaTablicyAtomic.java
0 → 100644
View file @
e680e29f
package
watki
.
podstawy
;
import
java.util.Arrays
;
import
java.util.concurrent.atomic.AtomicLong
;
public
class
SumaTablicyAtomic
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Startujemy"
);
final
int
SIZE
=
500_000_000
;
int
[]
t
=
new
int
[
SIZE
];
Arrays
.
fill
(
t
,
5
);
System
.
out
.
println
(
"Mam tablicę"
);
AtomicLong
sumaGlobalna
=
new
AtomicLong
();
Thread
watek1
=
new
Thread
(()
->
{
long
suma
=
0
;
for
(
int
i
=
0
;
i
<
t
.
length
/
2
;
i
++)
{
suma
+=
t
[
i
];
}
sumaGlobalna
.
addAndGet
(
suma
);
});
Thread
watek2
=
new
Thread
(()
->
{
long
suma
=
0
;
for
(
int
i
=
t
.
length
/
2
;
i
<
t
.
length
;
i
++)
{
suma
+=
t
[
i
];
}
sumaGlobalna
.
addAndGet
(
suma
);
});
long
p
=
System
.
nanoTime
();
watek1
.
start
();
watek2
.
start
();
try
{
watek1
.
join
();
watek2
.
join
();
}
catch
(
InterruptedException
e
)
{
}
long
k
=
System
.
nanoTime
();
System
.
out
.
printf
(
"Suma ostateczna: %s\n"
,
sumaGlobalna
);
System
.
out
.
printf
(
"Czas działania: %.6f\n"
,
(
k
-
p
)*
1
e
-
9
);
}
}
PC21-JavaUzupelnienia/src/watki/podstawy/SumaTablicyAtomicWolno.java
0 → 100644
View file @
e680e29f
package
watki
.
podstawy
;
import
java.util.Arrays
;
import
java.util.concurrent.atomic.AtomicLong
;
public
class
SumaTablicyAtomicWolno
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Startujemy"
);
final
int
SIZE
=
500_000_000
;
int
[]
t
=
new
int
[
SIZE
];
Arrays
.
fill
(
t
,
5
);
System
.
out
.
println
(
"Mam tablicę"
);
AtomicLong
sumaGlobalna
=
new
AtomicLong
();
Thread
watek1
=
new
Thread
(()
->
{
for
(
int
i
=
0
;
i
<
t
.
length
/
2
;
i
++)
{
sumaGlobalna
.
addAndGet
(
t
[
i
]);
}
});
Thread
watek2
=
new
Thread
(()
->
{
for
(
int
i
=
t
.
length
/
2
;
i
<
t
.
length
;
i
++)
{
sumaGlobalna
.
addAndGet
(
t
[
i
]);
}
});
long
p
=
System
.
nanoTime
();
watek1
.
start
();
watek2
.
start
();
try
{
watek1
.
join
();
watek2
.
join
();
}
catch
(
InterruptedException
e
)
{
}
long
k
=
System
.
nanoTime
();
System
.
out
.
printf
(
"Suma ostateczna: %s\n"
,
sumaGlobalna
);
System
.
out
.
printf
(
"Czas działania: %.6f\n"
,
(
k
-
p
)*
1
e
-
9
);
}
}
PC21-JavaUzupelnienia/src/watki/podstawy/SumaTablicyBezWatkow.java
0 → 100644
View file @
e680e29f
package
watki
.
podstawy
;
import
java.util.Arrays
;
public
class
SumaTablicyBezWatkow
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Startujemy"
);
final
int
SIZE
=
500_000_000
;
int
[]
t
=
new
int
[
SIZE
];
Arrays
.
fill
(
t
,
5
);
System
.
out
.
println
(
"Mam tablicę"
);
long
p
=
System
.
nanoTime
();
long
suma
=
0
;
for
(
int
i
=
0
;
i
<
t
.
length
;
i
++)
{
suma
+=
t
[
i
];
}
long
k
=
System
.
nanoTime
();
System
.
out
.
printf
(
"Suma ostateczna: %s\n"
,
suma
);
System
.
out
.
printf
(
"Czas działania: %.6f\n"
,
(
k
-
p
)
*
1
e
-
9
);
}
}
PC21-JavaUzupelnienia/src/watki/podstawy/SumaWieleWatkow.java
0 → 100644
View file @
e680e29f
package
watki
.
podstawy
;
import
java.util.Arrays
;
public
class
SumaWieleWatkow
{
static
long
sumaPrzedzialu
(
int
[]
tablica
,
int
lewo
,
int
prawo
)
{
// liczy sumę elementów od lewo włącznie do prawy wyłączając
long
suma
=
0
;
for
(
int
i
=
lewo
;
i
<
prawo
;
i
++)
{
suma
+=
tablica
[
i
];
}
return
suma
;
}
public
static
long
sumaWieleWatkow
(
int
[]
tablica
,
int
ileWatkow
)
{
long
[]
podsumy
=
new
long
[
ileWatkow
];
Thread
[]
watki
=
new
Thread
[
ileWatkow
];
for
(
int
nr
=
0
;
nr
<
ileWatkow
;
nr
++)
{
final
int
numer
=
nr
;
final
int
lewy
=
(
int
)((
long
)
nr
*
tablica
.
length
/
ileWatkow
);
final
int
prawy
=
(
int
)((
long
)(
nr
+
1
)
*
tablica
.
length
/
ileWatkow
);
watki
[
nr
]
=
new
Thread
(()
->
{
long
sumaCzesciowa
=
sumaPrzedzialu
(
tablica
,
lewy
,
prawy
);
podsumy
[
numer
]
=
sumaCzesciowa
;
});
}
for
(
int
nr
=
0
;
nr
<
ileWatkow
;
nr
++)
{
watki
[
nr
].
start
();
}
// czekamy, aż wątki się zakończą i dodajemy ich podsumy do sumy ogólnej
long
suma
=
0
;
try
{
for
(
int
nr
=
0
;
nr
<
ileWatkow
;
nr
++)
{
watki
[
nr
].
join
();
suma
+=
podsumy
[
nr
];
}
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
suma
;
}
public
static
void
main
(
String
[]
args
)
{
final
int
SIZE
=
500_000_000
;
int
[]
t
=
new
int
[
SIZE
];
Arrays
.
fill
(
t
,
5
);
System
.
out
.
println
(
"Suma 8 wątków"
);
long
p
=
System
.
nanoTime
();
long
suma
=
sumaWieleWatkow
(
t
,
8
);
long
k
=
System
.
nanoTime
();
System
.
out
.
printf
(
"Suma ostateczna: %s\n"
,
suma
);
System
.
out
.
printf
(
"Czas działania: %.6f\n"
,
(
k
-
p
)*
1
e
-
9
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment