Wielowątkowść

0

Witam serdecznie,
zwracam się z pomocą dotyczącą konkretnego polecenia:
Napisz aplikację generującą logi na dowolnie zadany przez siebie temat (np. generator logu oceny filmu będzie wyglądał następująco: id_filmu, id_uzytkownika, ocena, data_glosowania). Zapis informacji do pliku należy zrealizować wielowątkowo z użyciem dwóch metod: poprzez dziedziczenie klasy Thread, oraz poprzez implementację interfejsu Runnable. Następie wielowątkowo odczytać z pliku informacje w nim zawarte i wyświetlić po 10 linii dla każdego wątku.

Jesteśmy mega w tyle z wykładami i niestety nie mamy pojęcia jak zrealizować powyższe zadanie. Każdy id ma być rozszerzeniem klasy Thread? Proszę o jakiekolwiek wskazówki/podpowiedzi.
Liczę na pomoc. Pozdrawiam

0

Ale te informacje na temat filmu to skąd mają pochodzić ?

1

Zapis informacji do pliku należy zrealizować wielowątkowo

znaczy mam pisać do jednego pliku z dwóch wątków ? mają to być dwa osobne pliki, jeden per wątek? jaśnie, przecież z twojego opisu nic nie wynika.

Następie wielowątkowo odczytać z pliku informacje w nim zawarte i wyświetlić po 10 linii dla każdego wątku.

jak wyżej.

Każdy id

co to jest "id" ?

Jesteśmy mega w tyle z wykładami i niestety nie mamy pojęcia jak zrealizować powyższe zadanie.

studia nie są obowiązkowe.

0
rubaszny_karp napisał(a):

Zapis informacji do pliku należy zrealizować wielowątkowo

znaczy mam pisać do jednego pliku z dwóch wątków ? mają to być dwa osobne pliki, jeden per wątek? jaśnie, przecież z twojego opisu nic nie wynika.

Taką treść polecenia otrzymaliśmy. Najprawdopodobniej jeden plik z wszystkich wątków.

Jesteśmy mega w tyle z wykładami i niestety nie mamy pojęcia jak zrealizować powyższe zadanie.

studia nie są obowiązkowe.

Co to ma wspólnego z tym, że materiał poruszany na wykładach jest opóźniony względem laboratorium? Odpowiedź godna pewnego "e" forum.

0

W tym zadaniu chyba chodzi o to, żeby synchronizować zapis z wielu wątków do jednego pliku, tzn. jeden wątek pisze cośtam do pliku, drugi wątek czeka.

Załóżmy taki scenariusz:
Wątek pierwszy próbuje zapisać "ABC". Wątek drugi próbuje zapisać "DEF".
W rezultacie możesz dostać np. "ADEFBC". Analogicznie to

Najłatwiej chyba będzie stworzy jeden obiekt klasy, np.

public class FileLogger {
	// fields

	public synchronized void writeLine(String line) { 
		// ... do something
	}

	public synchronized String readLine(){
		// ... do something
	}
}

Kluczowe jest tutaj słówko "synchronized", które zapewni, że dwa wątki nie będą czytały ani pisały jednocześnie. Więcej na ten temat:
https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

Ewentualnie jest jeszcze opcja z FileChannel.tryLock():
http://www.javadocexamples.com/java/nio/channels/FileChannel/tryLock().html

Nie jestem jednak pewien, czy nie jest to zależne od systemu plików.

1 użytkowników online, w tym zalogowanych: 0, gości: 1