Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
pingvinarik
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 8
1

Многопоточность. Синхронизация

13.03.2017, 19:10. Просмотров 745. Ответов 3
Метки нет (Все метки)

Пишу класс для шифрования файлов.

В классе есть ключ, есть метод setKey, который позволяет менять этот ключ. И есть 2 метода, encryptFile и decryptFile которые создают и запускают потоки шифрующие и расшифровывающие файлы. Я хочу сделать так, чтобы методы encryptFile и decryptFile можно было запускать одновременно, а метод setKey можно было запускать только тогда, когда оба предыдущих метода не работают, т.к. если во время шифрования или расшифрования поменять ключ, то будет грустненько. Подскажите пожалуйста, как это можно сделать с помощью инструментов для работы с потоками.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2017, 19:10
Ответы с готовыми решениями:

многопоточность
Мне нужно что бы сообщение System.out.println(String.format("%1$s будит...

Многопоточность
сделать Дизайн приложения, по крайней мере из двух нитей: - Один для обработки...

Многопоточность
Здравствуйте, что-то у меня не выходит ... Должно быть так А . . В А...

Многопоточность
Кто-нибудь может подсказать, почему при k=2 и z=1 выбрасывается ошибка...

Многопоточность
Люди, не могли бы вы на пальцах объяснить, что такое пул потоков, а то...

3
Cuda1
18 / 18 / 7
Регистрация: 08.10.2014
Сообщений: 98
13.03.2017, 20:45 2
Лучший ответ Сообщение было отмечено pingvinarik как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    boolean isEncrypt = false;
    boolean isDecrypt = false;
    public String encryptFile(String str){
         isEncrypt = true;
         /*
        шифровка
         */
         isEncrypt = false;
        notify();
        return "";
    }
    public String decryptFile(String str){
        isDecrypt = true;
        /*
        расшифровка
         */
        isDecrypt = false;
        notify();
        return "";
    }
    public void setKey() throws InterruptedException {
       while (isEncrypt || isDecrypt) wait();
        /*
        установка ключа
         */
    }
метод setKey будет ожидать пока 2 переменные isEncrypt и isDecrypt не будут равны false, что означает, что методы encryptFile и decryptFile в данный момент не выполняются.

Добавлено через 10 минут
хотя тут не все так однозначно - методы wait() и notify() должны вызываться из синхронизированного контекста, а по условию вашей задачи, как я понял, синхронизировать нельзя.
1
pingvinarik
0 / 0 / 0
Регистрация: 18.12.2016
Сообщений: 8
14.03.2017, 08:28  [ТС] 3
Можно тогда wait убрать а флаги как volatile пометить
0
Cuda1
18 / 18 / 7
Регистрация: 08.10.2014
Сообщений: 98
14.03.2017, 09:45 4
Цитата Сообщение от pingvinarik Посмотреть сообщение
Можно тогда wait убрать а флаги как volatile пометить
ну как вариант да. но в setKey тогда у вас будет бесконечный цикл пока условие не станет ложным.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2017, 09:45

Многопоточность
Доброго времени. Не могу сообразить как сделать: Задача: Методы класса Main...

Многопоточность
У меня есть класс в нем куча функций мне нужно что б эти функции работали...

Многопоточность
Здравствуйте. Тяжелая однако для меня тема многопоточности. Столкнулся вот с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru