listoCheck /
AccMarket
Курсовая работа по предмету Информационные системы "Биржа для продажи аккаунтов игровых площадок"
50/100 healthLoading repository data…
ChertChill / repository
Курсовая работа по дисциплине "Многопоточное и асинхронное программирование на Java"
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Этот проект представляет собой реализацию библиотеки реактивного программирования, аналогичную RxJava, в соответствии с техническим заданием. Реализация включает все требуемые компоненты: базовые интерфейсы, операторы преобразования данных, управление потоками выполнения, обработку ошибок и тестирование.
В проекте реализованы все необходимые базовые компоненты реактивного программирования. Интерфейс Observer<T> предоставляет методы для обработки элементов потока (onNext), ошибок (onError) и завершения (onComplete). Класс Observable<T> реализует основной паттерн реактивного программирования с поддержкой подписки и статическим методом create() для создания потоков данных. Код написан с учетом принципов чистоты и структурированности.
Реализованы основные операторы преобразования данных: map для трансформации элементов потока и filter для фильтрации на основе предиката. Каждый оператор протестирован и демонстрирует корректную работу с различными типами данных. Операторы поддерживают цепочки преобразований и корректно обрабатывают ошибки.
Разработана система управления потоками выполнения на основе интерфейса Scheduler. Реализованы три типа планировщиков:
IOThreadScheduler на основе CachedThreadPool для I/O операцийComputationScheduler на основе FixedThreadPool для вычисленийSingleThreadScheduler для последовательного выполнения задачМетоды subscribeOn и observeOn обеспечивают гибкое управление потоками выполнения, позволяя выполнять подписку и обработку элементов в разных потоках.
Реализован оператор flatMap для преобразования элементов в новые потоки данных с последующим их объединением. Интерфейс Disposable предоставляет механизм отмены подписок и проверки их состояния. Система обработки ошибок позволяет корректно передавать и обрабатывать исключения через метод onError.
Разработан комплекс тестов, охватывающий все аспекты реализации:
Проект реализует паттерн "Наблюдатель" (Observer pattern) и следует принципам реактивного программирования. Основные компоненты:
Observer
public interface Observer<T> {
void onNext(T item);
void onError(Throwable t);
void onComplete();
}
Observable
create()Scheduler
public interface Scheduler {
void execute(Runnable task);
}
Disposable
public interface Disposable {
void dispose();
boolean isDisposed();
}
public <R> Observable<R> map(Function<T, R> mapper) {
return new Observable<>(observer -> {
subscribe(
item -> observer.onNext(mapper.apply(item)),
observer::onError,
observer::onComplete
);
});
}
public Observable<T> filter(Predicate<T> predicate) {
return new Observable<>(observer -> {
subscribe(
item -> {
if (predicate.test(item)) {
observer.onNext(item);
}
},
observer::onError,
observer::onComplete
);
});
}
public <R> Observable<R> flatMap(Function<T, Observable<R>> mapper) {
return new Observable<>(observer -> {
subscribe(
item -> mapper.apply(item).subscribe(observer),
observer::onError,
observer::onComplete
);
});
}
IOThreadScheduler
CachedThreadPoolComputationScheduler
FixedThreadPoolSingleThreadScheduler
observable
.subscribeOn(new IOThreadScheduler()) // Подписка в IO потоке
.observeOn(new ComputationScheduler()) // Обработка в вычислительном потоке
.subscribe(...);
Реализована комплексная система обработки ошибок:
onError()Пример:
observable
.map(x -> {
if (x < 0) throw new IllegalArgumentException("Отрицательное значение");
return x * 2;
})
.subscribe(
item -> System.out.println("Получено: " + item),
error -> System.out.println("Ошибка: " + error.getMessage()),
() -> System.out.println("Завершено")
);
Проект включает комплексные тесты:
ObservableTest
ConcurrencyTest
OperatorChainTest
AdvancedScenariosTest
Observable.create(observer -> {
observer.onNext(1);
observer.onNext(2);
observer.onComplete();
})
.subscribe(
item -> System.out.println("Получено: " + item),
error -> System.out.println("Ошибка: " + error.getMessage()),
() -> System.out.println("Завершено")
);
Observable.create(observer -> {
for (int i = 0; i < 10; i++) {
observer.onNext(i);
}
observer.onComplete();
})
.filter(x -> x % 2 == 0)
.map(x -> x * 2)
.flatMap(x -> Observable.create(observer -> {
observer.onNext(x * 10);
observer.onNext(x * 20);
observer.onComplete();
}))
.subscribeOn(new IOThreadScheduler())
.observeOn(new ComputationScheduler())
.subscribe(
item -> System.out.println("Результат: " + item),
error -> System.out.println("Ошибка: " + error.getMessage()),
() -> System.out.println("Завершено")
);
Disposable subscription = Observable.create(observer -> {
int i = 0;
while (!Thread.currentThread().isInterrupted()) {
observer.onNext(i++);
Thread.sleep(100);
}
})
.subscribe(
item -> System.out.println("Получено: " + item),
error -> System.out.println("Ошибка: " + error.getMessage()),
() -> System.out.println("Завершено")
);
// Отмена подписки через 500мс
Thread.sleep(500);
subscription.dispose();
Selected from shared topics, language and repository description—not editorial ratings.
listoCheck /
Курсовая работа по предмету Информационные системы "Биржа для продажи аккаунтов игровых площадок"
50/100 healthIvanCherepanov /
Курсовая работа по Spring в РТУ МИРЭА. 4 семестр
29/100 health13ultiman37 /
Курсовая работа по Java 4 cем
27/100 healthpyatizbyantsevia /
Курсовая работа по дисциплине "ООП. Java"
15/100 healthmo0nchild /
Курсовая работа по дисциплине "Технология программирования"
27/100 healthMICROWAVE-web /
Курсовая работа 3-й семестр по дисциплине "Программирование"
27/100 health