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
77248684
Commit
77248684
authored
Jun 17, 2023
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wait i notify
parent
28c2fba2
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
116 additions
and
0 deletions
+116
-0
Konto.java
PC21-JavaUzupelnienia/src/watki/konto/Konto.java
+19
-0
Zycie.java
PC21-JavaUzupelnienia/src/watki/konto/Zycie.java
+48
-0
Zycie_BezSynchonizacji.java
...aUzupelnienia/src/watki/konto/Zycie_BezSynchonizacji.java
+49
-0
No files found.
PC21-JavaUzupelnienia/src/watki/konto/Konto.java
View file @
77248684
...
@@ -42,6 +42,7 @@ public class Konto {
...
@@ -42,6 +42,7 @@ public class Konto {
throw
new
IllegalArgumentException
(
"Niedodatnia kwota w metodzie wplata"
);
throw
new
IllegalArgumentException
(
"Niedodatnia kwota w metodzie wplata"
);
}
}
saldo
+=
kwota
;
saldo
+=
kwota
;
notify
();
}
}
// W tej wersji metoda w razie braku środków wyrzuca wyjątek
// W tej wersji metoda w razie braku środków wyrzuca wyjątek
...
@@ -55,4 +56,22 @@ public class Konto {
...
@@ -55,4 +56,22 @@ public class Konto {
saldo
-=
kwota
;
saldo
-=
kwota
;
}
}
// W tej wersji metoda w razie braku środków CZEKA
public
synchronized
void
wyplataCzekaj
(
int
kwota
)
{
if
(
kwota
<=
0
)
{
throw
new
IllegalArgumentException
(
"Niedodatnia kwota w metodzie wyplata"
);
}
try
{
// zazwyczaj wait umieszcza się w while, aby obudzony wątek sprawdził jeszcze raz czy warunek, na który czekał, naprawdę jest już spełnione
// w tym przypadku czy wpłacona kwota jest wystarczająca
while
(
kwota
>
saldo
)
{
wait
();
}
saldo
-=
kwota
;
notify
();
// budzenie kaskadowe
}
catch
(
InterruptedException
e
)
{
// właściwa praktyka: w przypadku InterruptedException nie należy zmieniać już stanu obiektu
}
}
}
}
PC21-JavaUzupelnienia/src/watki/konto/Zycie.java
0 → 100644
View file @
77248684
package
watki
.
konto
;
public
class
Zycie
{
public
static
void
main
(
String
[]
args
)
{
Konto
konto
=
new
Konto
(
1
,
"Ala Kowalska"
,
12000
);
System
.
out
.
println
(
konto
);
Thread
wplacacz
=
new
Thread
(()
->
{
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
try
{
Thread
.
sleep
(
5000
);
}
catch
(
InterruptedException
e
)
{
}
konto
.
wplata
(
10000
);
System
.
out
.
println
(
"wpłacone, teraz jest "
+
konto
.
getSaldo
());
}
});
Thread
wyplacacz
=
new
Thread
(()
->
{
for
(
int
i
=
0
;
i
<
100_000
;
i
++)
{
try
{
Thread
.
sleep
(
550
);
}
catch
(
InterruptedException
e
)
{
}
try
{
konto
.
wyplataCzekaj
(
2500
);
System
.
out
.
println
(
"wypłacone, teraz jest "
+
konto
.
getSaldo
());
}
catch
(
Exception
e
)
{
System
.
err
.
println
(
e
.
getMessage
());
}
}
});
wplacacz
.
start
();
wyplacacz
.
start
();
try
{
wplacacz
.
join
();
wyplacacz
.
join
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
System
.
out
.
println
(
konto
);
}
}
PC21-JavaUzupelnienia/src/watki/konto/Zycie_BezSynchonizacji.java
0 → 100644
View file @
77248684
package
watki
.
konto
;
public
class
Zycie_BezSynchonizacji
{
public
static
void
main
(
String
[]
args
)
{
Konto
konto
=
new
Konto
(
1
,
"Ala Kowalska"
,
12000
);
System
.
out
.
println
(
konto
);
Thread
wplacacz
=
new
Thread
(()
->
{
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
try
{
Thread
.
sleep
(
5000
);
}
catch
(
InterruptedException
e
)
{
}
konto
.
wplata
(
10000
);
System
.
out
.
println
(
"wpłacone, teraz jest "
+
konto
.
getSaldo
());
}
});
Thread
wyplacacz
=
new
Thread
(()
->
{
for
(
int
i
=
0
;
i
<
100_000
;
i
++)
{
try
{
Thread
.
sleep
(
550
);
}
catch
(
InterruptedException
e
)
{
}
try
{
konto
.
wyplata
(
2500
);
System
.
out
.
println
(
"wypłacone, teraz jest "
+
konto
.
getSaldo
());
}
catch
(
Exception
e
)
{
System
.
err
.
println
(
e
.
getMessage
());
}
}
});
wplacacz
.
start
();
wyplacacz
.
start
();
// oczekiwanie na zakończenie wątku - operacja join
try
{
wplacacz
.
join
();
wyplacacz
.
join
();
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
System
.
out
.
println
(
konto
);
}
}
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