Commit e433670c by Patryk Czarnik

Pierwsze programy w projektach Maven i Watki.

Tu jest dalszy opis commita.
parent 25b62387
/target/
/.settings/
/.classpath
/.project
/*.iml
/.idea/
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.alx.kjava</groupId>
<artifactId>PC21-Maven</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
</project>
package biblioteki;
import java.io.File;
import java.io.IOException;
import java.nio.file.attribute.FileTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import org.apache.commons.io.FileUtils;
public class CommonsIO {
public static void main(String[] args) {
// Sprawdźmy datę modyfikacji pliku pom.xml
File plik = new File("pom.xml");
try {
FileTime fileTime = FileUtils.lastModifiedFileTime(plik);
System.out.println(fileTime);
ZonedDateTime dt = ZonedDateTime.ofInstant(fileTime.toInstant(), ZoneId.systemDefault());
System.out.println(dt);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package pakiet;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello world");
System.out.println("Z projektu Mavenowego");
}
}
package pakiet;
public class ProbaSwitcha {
public static void main(String[] args) {
var numer = 3;
var wynik = switch(numer) {
case 1 -> "poniedziałek";
case 2 -> "wtorek";
case 3 -> "środa";
case 4 -> "czwartek";
case 5 -> "piątek";
case 6 -> "sobota";
case 7 -> "niedziela";
default -> "NIEPOPRAWNY NUMER";
};
System.out.println(wynik);
}
}
/target/
/.settings/
/.classpath
/.project
/*.iml
/.idea/
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.alx.kjava</groupId>
<artifactId>PC22-Watki</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
package watki.na_zajeciach;
public class AAA_PierwszeWatki {
static String info(Thread watek) {
return "id: " + watek.getId() + " , nazwa: " + watek.getName();
}
public static void main(String[] args) {
System.out.println("Początek maina");
System.out.println("main: " + info(Thread.currentThread()));
// klasa anonimowa
Runnable trescA = new Runnable() {
public void run() {
System.out.println("Początek wątku A");
System.out.println("AAA: " + info(Thread.currentThread()));
for(int i = 1; i <= 100; i++) {
System.out.println("AAA " + i);
}
System.out.println("Koniec wątku A");
}
};
Thread watekA = new Thread(trescA);
// wyrażenie lambda
Thread watekB = new Thread(() -> {
System.out.println("Początek wątku B");
System.out.println("BBB: " + info(Thread.currentThread()));
for(int i = 1; i <= 100; i++) {
System.out.println("BBB " + i);
}
System.out.println("Koniec wątku B");
});
System.out.println("Przygotowane wątki:\n\t" + info(watekA) + "\n\t" + info(watekB));
System.out.println("Uruchamiam wątki...\n");
watekA.start();
watekB.start();
System.out.println(watekA.getState());
System.out.println("Koniec maina");
}
}
package watki.na_zajeciach;
public class BBB_Join {
static String info(Thread watek) {
return "id: " + watek.getId() + " , nazwa: " + watek.getName();
}
public static void main(String[] args) {
System.out.println("Początek maina");
System.out.println("main: " + info(Thread.currentThread()));
// klasa anonimowa
Runnable trescA = new Runnable() {
public void run() {
System.out.println("Początek wątku A");
System.out.println("AAA: " + info(Thread.currentThread()));
for(int i = 1; i <= 100; i++) {
System.out.println("AAA " + i);
}
System.out.println("Koniec wątku A");
}
};
Thread watekA = new Thread(trescA);
// wyrażenie lambda
Thread watekB = new Thread(() -> {
System.out.println("Początek wątku B");
System.out.println("BBB: " + info(Thread.currentThread()));
for(int i = 1; i <= 100; i++) {
System.out.println("BBB " + i);
}
System.out.println("Koniec wątku B");
});
System.out.println("Przygotowane wątki:\n\t" + info(watekA) + "\n\t" + info(watekB));
System.out.println("Uruchamiam wątki...\n");
watekA.start();
watekB.start();
System.out.println(watekA.getState());
System.out.println("main: czekam na zakończenie wątków");
try {
watekA.join();
watekB.join();
System.out.println("main: Wątki zakończone");
} catch (InterruptedException e) {
System.out.println("Interrupt! " + e);
}
System.out.println(watekA.getState());
System.out.println("Koniec maina");
}
}
package watki.na_zajeciach;
public class Konto {
private final int numer;
private int saldo;
private String wlasciciel;
public Konto(int numer, int saldo, String wlasciciel) {
this.numer = numer;
this.saldo = saldo;
this.wlasciciel = wlasciciel;
}
@Override
public String toString() {
return "Konto nr " + numer + ", saldo " + saldo + ", wł. " + wlasciciel;
}
public String getWlasciciel() {
return wlasciciel;
}
public void setWlasciciel(String wlasciciel) {
this.wlasciciel = wlasciciel;
}
public int getNumer() {
return numer;
}
public int getSaldo() {
return saldo;
}
public synchronized void wplata(int kwota) {
if (kwota <= 0) {
throw new IllegalArgumentException("Kwota nie jest dodatnia");
}
saldo += kwota;
notify();
}
// Ta wersja metody w przypadku braku środków wyrzuca wyjątek BrakSrodkow
public synchronized void wyplata(int kwota) throws BrakSrodkow {
if (kwota <= 0) {
throw new IllegalArgumentException("Kwota nie jest dodatnia");
}
if (kwota > saldo) {
throw new BrakSrodkow("Za mało kasy podczas wypłaty");
}
saldo -= kwota;
}
// Ta wersja metody w przypadku braku środków będzie czekać, aż pieniądze pojawią się na koncie.
public synchronized void wyplataCzekaj(int kwota) throws BrakSrodkow {
if (kwota <= 0) {
throw new IllegalArgumentException("Kwota nie jest dodatnia");
}
try {
while(kwota > saldo) {
wait();
}
saldo -= kwota;
notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void przelew(int kwota, Konto kontoDocelowe) throws BrakSrodkow {
if (kwota <= 0) {
throw new IllegalArgumentException("Kwota nie jest dodatnia");
}
synchronized (this) {
if (kwota > saldo) {
throw new BrakSrodkow("Za mało kasy podczas przelewu");
}
this.saldo -= kwota;
}
synchronized (kontoDocelowe) {
kontoDocelowe.saldo += kwota;
kontoDocelowe.notify();
}
}
public static class BrakSrodkow extends Exception {
public BrakSrodkow() {
super();
}
public BrakSrodkow(String message) {
super(message);
}
}
}
package watki.na_zajeciach;
import watki.na_zajeciach.Konto.BrakSrodkow;
public class Wyplacanie1 {
public static void main(String[] args) {
final int ILE_RAZY = 100_000;
final int KWOTA = 10;
Konto konto = new Konto(1, 1000000, "Ala");
System.out.println("Początek: " + konto);
Thread wplacacz = new Thread(() -> {
for(int i = 0; i < ILE_RAZY; i++) {
konto.wplata(KWOTA);
}
});
Thread wyplacacz = new Thread(() -> {
for(int i = 0; i < ILE_RAZY; i++) {
try {
konto.wyplata(KWOTA);
} catch (BrakSrodkow e) {
System.err.println(e);
}
}
});
System.out.println("Uruchamiam wątki...");
wplacacz.start();
wyplacacz.start();
System.out.println("Czekam...");
try {
wplacacz.join();
wyplacacz.join();
} catch (InterruptedException e) {
System.err.println(e);
}
System.out.println("Koniec: " + konto);
}
}
package watki.na_zajeciach;
import watki.na_zajeciach.Konto.BrakSrodkow;
public class Wyplacanie2 {
public static void main(String[] args) {
Konto konto = new Konto(1, 10_000, "Ala");
System.out.println("Początek: " + konto);
Thread wplacacz = new Thread(() -> {
while(true) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
konto.wplata(5000);
System.out.println("wpłacacz wpłacił, saldo = " + konto.getSaldo());
}
});
Thread wyplacacz = new Thread(() -> {
while(true) {
try {
konto.wyplata(800);
System.out.println("wypłacacz wydał 800, saldo = " + konto.getSaldo());
} catch (BrakSrodkow e) {
System.err.println(e);
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
}
}
});
System.out.println("Uruchamiam wątki...");
wplacacz.start();
wyplacacz.start();
// w nieskończoność...
}
}
package watki.na_zajeciach;
import watki.na_zajeciach.Konto.BrakSrodkow;
public class Wyplacanie3 {
public static void main(String[] args) {
Konto konto = new Konto(1, 10_000, "Ala");
System.out.println("Początek: " + konto);
Thread wplacacz = new Thread(() -> {
while(true) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
konto.wplata(500);
System.out.println("wpłacacz wpłacił, saldo = " + konto.getSaldo());
}
});
Thread wyplacacz = new Thread(() -> {
while(true) {
try {
konto.wyplataCzekaj(800);
System.out.println("wypłacacz wydał 800, saldo = " + konto.getSaldo());
} catch (BrakSrodkow e) {
System.err.println(e);
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
}
}
});
System.out.println("Uruchamiam wątki...");
wplacacz.start();
wyplacacz.start();
// w nieskończoność...
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment