• Июля 21, 2019, 03:05:08 am
• Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Новости: Вебинар о выборе IT профессии и руководство для новичков: http://bit.ly/2HG2vFp

Автор Тема: Java OOP Online/Home Work/KirillB  (Прочитано 600 раз)

KirillB

  • Пользователи
  • *
  • Сообщений: 50
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #30 : Июня 18, 2019, 06:36:21 pm »
Lesson7Task2

2.   Реализуйте программу многопоточного копирования файла блоками с выводом прогресса на экран.

https://github.com/kbelyako/JavaOOPLesson7Task2FileCopy/tree/master/src/com/yandex/kbelyako

Подскажите пожалуйста где ошибка/недоработка?

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 12038
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #31 : Июня 19, 2019, 02:36:47 pm »

KirillB

СТранно но на первый взгял я не вижу ошибочных моментов. А в чем проявляется ошибка?

KirillB

  • Пользователи
  • *
  • Сообщений: 50
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #32 : Июня 19, 2019, 06:31:25 pm »
Новый файл(копия) нечитабелен, поскольку он не дописан до конца. На последней итерации происходит что-то не то.
http://www.picshare.ru/view/10099179/

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 12038
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #33 : Июня 20, 2019, 12:39:34 am »
KirillB
Смотрите вы сначала вычитываете массив сдвигая указатель, а только потом проверяете а нужно было это делать или нет.

for (; (byteread = fis.read(bufer)) > 0;) {

for (; this.counter != 1;) {

Так и получиться -1 в конце файла, что и приведет к выходу за границы массива.
Попробуйте так реализовать копирование что бы сначала проверка, а потом действие.

KirillB

  • Пользователи
  • *
  • Сообщений: 50
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #34 : Июня 20, 2019, 06:41:15 am »
Alexander Ts

for (; (byteread = fis.read(bufer)) > 0;)  - это и есть проверка, взятая из работающего метод копирования в однопоточном режиме, из вашей лекции:

public static void copyFile(File in, File out) throws IOException {
byte[] bufer = new byte[1024 * 1024 * 8];
int byteread = 0;
try (FileInputStream fis = new FileInputStream(in);
FileOutputStream fos = new FileOutputStream(out)) {
for (; (byteread = fis.read(bufer)) > 0;) {
fos.write(bufer, 0, byteread);
}
} catch (IOException e) {
throw e;
}
}

for (; this.counter != 1;) - это проверка работать потоку или ждать

Так что мне до сих пор не понятно почему так происходит.
Также возникает вопрос: откудато берётся Thread-5 хотя их всего 3 должно быть?
Помогите пожалуйста разобраться.

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 12038
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #35 : Июня 20, 2019, 11:16:55 am »
KirillB
Нет
for (; (byteread = fis.read(bufer)) > 0;)Это не только проверка. Это еще и вычитка, в массив одновременно. Т.е. вы не только проверяете а еще и вычитываете данные.
В однопоточном режиме такое применимо потому что задач синхронизации не возникает.
Так что таки попробуйте поменять местами сначала проверка стоит или нет потоку работать, а только потом эта проверка.


KirillB

  • Пользователи
  • *
  • Сообщений: 50
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #36 : Июня 25, 2019, 09:38:49 am »
Lesson7Task2

2.   Реализуйте программу многопоточного копирования файла блоками с выводом прогресса на экран.

исправленый

https://github.com/kbelyako/JavaOOPLesson7Task2FileCopy/tree/master/src/com/yandex/kbelyako

KirillB

  • Пользователи
  • *
  • Сообщений: 50
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #37 : Июня 25, 2019, 02:03:15 pm »
 Домашнее задание Урок 7 многопоточное программирование часть 2

Lesson 7 Task 1

Существуют три корабля. На каждом из них 10 ящиков груза. Они одновременно прибыли в порт, в котором только 2 дока. Скорость разгрузки - 1 ящик в 0.5 сек. Напишите программу, которая, управляя кораблями, позволит им правильно разгрузить груз.

https://github.com/kbelyako/JavaOOPLesson7Task1ShipsMultithread/tree/master/Lesson7Task1ShipsMultithreading/src/com/yandex/kbelyako
« Последнее редактирование: Июня 25, 2019, 02:17:58 pm от KirillB »

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 12038
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #38 : Июня 26, 2019, 02:19:37 pm »

KirillB

Решение верное. Если тема многопоточности вас заинтересовала то можете посмотреть доп материал по Executor возможно это облегчит решения. Если же эта тема вас не сильно "зацепила" то можете смело двигаться дальше.

KirillB

  • Пользователи
  • *
  • Сообщений: 50
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #39 : Июля 08, 2019, 10:18:23 am »
Lesson 8 Task 1

Используя стандартный методы сериализации создайте мини-базу данных для работы с  группами студентов (возможность записи и чтения базы из файла по запросу пользователя).

https://github.com/kbelyako/JavvaOOPLesson8Task1_GroupSavetoFileViaSerializable/tree/master/JavaOOPLesson8Task1GroupSave_Via_Serializable/src/com/yandex/kbelyako

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 12038
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #40 : Июля 08, 2019, 05:07:55 pm »
KirillB

Решение верное

KirillB

  • Пользователи
  • *
  • Сообщений: 50
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #41 : Июля 14, 2019, 05:02:36 pm »
Lesson 8 Task 2,3

2) Создайте класс-контейнер типа стек (класс в который можно добавлять и удалять объекты других классов, только в вершину стека), в который можно сохранять объекты произвольного типа. Должен быть метод добавления элемента в стек, получение с удалением элемента из стека, и просто получение элемента из вершины из стека. Должна быть реализована работа с «черным списком» классов (смотри ниже). Если объект который добавляется в стек принадлежит классу из «черного списка», то добавление такого объекта запрещено.
3) Для описанного выше стека создайте класс «Черный список», в котором будут описаны классы объектов которые нельзя добавлять в стек. Должна быть возможность добавления классов в черный список, проверка объекта на то, что класс, к которому он принадлежит, принадлежит или не принадлежит к классам в черном списке.

https://github.com/kbelyako/JavaOOPLesson8Task2ObjectStack/tree/master/JavaOOPLesson8Task2ObjectStack/src/com/yandex/kbelyako

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 12038
    • Просмотр профиля
    • E-mail
Re: Java OOP Online/Home Work/KirillB
« Ответ #42 : Июля 14, 2019, 11:33:03 pm »

KirillB

Решение верное