Премини към съдържанието

Препоръчан отговор


Тъй като от скоро уча, Java ми е малко по-трудно, имам следната задача, но не мога да стигна до нейното написване: 
Да се напише Java конзолно приложение със следната функционалност, създаване и спиране на 2 нишки, които използват споделен ресурс(променлива тип long). Нишка 1 интеrпетира и визуализира стойността по променливата, а нишка 2 декрементира и извежда по стойността на променливата.

Ако някой може да ми помогне, ще съм благодарен, лек ден ! 

Редактирано от ExaFlop (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

А написал ли си нещо или чакаш някой да го напише?

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 13 минути, Стефан Кънев написа:

мъчех се да напиша нещо, но не ми се получава особено

Гледай сега, хората тук домашни не пишат. Пусни каквото си написал и ще ти помогнат, като ти поправят грешките и ти кажат точно какво си сбъркал. (ама не копи пейст от нета)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
на 4/29/2017 в 14:23, Стефан Кънев написа:

Тъй като от скоро уча, Java ми е малко по-трудно, имам следната задача, но не мога да стигна до нейното написване: 
Да се напише Java конзолно приложение със следната функционалност, създаване и спиране на 2 нишки, които използват споделен ресурс(променлива тип long). Нишка 1 интеrпетира и визуализира стойността по променливата, а нишка 2 декрементира и извежда по стойността на променливата.

 

Ако някой може да ми помогне, ще съм благодарен, лек ден ! 

Здравейте !

От условието не става ясно какво точно трябва да прави нишка 1 (интеrпетира ?!). Ще приема, че нишка 1 инкрементира (увеличава с 1) стойността на споделената променлива, докато нишка 2 декрементира (понижава с 1) променливата.

Прилагам примерен, до известна степен оптимизиран код, който върши дадената задача. Писан е на Java 8 (с ламбди) !!!

Проучете какво прави, опитайте се разберете защо се използват неща като Lock, защо имаме Thread.sleep и какво всъщност става. Добавил съм log информация, която ще Ви помогне да проследите изпълнението на програмата, до нейното ръчно спиране.

package edu.project.threads;

import java.util.Random;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ThreadMod {

	interface UnaryOperation {
		public void execute();
	}

	class UnaryOperationImpl implements Runnable {
		UnaryOperation operation;

		public UnaryOperationImpl(UnaryOperation operation) {
			this.operation = operation;
		}

		@Override
		public void run() {
			while (true) {
				try {
					lock.lock();
					operation.execute();
				} finally {
					lock.unlock();
				}
				try {
					int sleep = (1 + random.nextInt(10));
					System.out.println(Thread.currentThread().getName() + ": sleep for " + sleep + " sec.");
					Thread.sleep(sleep * 1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}

		}
	}

	Thread incrementThread;
	Thread decrementThread;
	Lock lock = new ReentrantLock();
	long sharedResource = 0L;
	Random random = new Random();

	public void init() {
		incrementThread = new Thread(new UnaryOperationImpl(() -> {
			System.out.println(Thread.currentThread().getName() + ": Incrementing to " + ++sharedResource);
		}), "THREAD[Increment]");
		incrementThread.start();
		decrementThread = new Thread(new UnaryOperationImpl(() -> {
			System.out.println(Thread.currentThread().getName() + ": Decrementing to " + --sharedResource);
		}), "THREAD[Decrement]");
		decrementThread.start();
	}

	public static void main(String[] args) {
		new ThreadMod().init();
	}
}

 

на 4/29/2017 в 14:30, ExaFlop написа:

А написал ли си нещо или чакаш някой да го напише?

Принципно, аз също съм голям противник на мързела, но специално за Multi-threading частта на Java, ситуацията е малко парадоксална - За да знаеш как да напишеш нещо, трябва да имаш нещо вече написано, което е да видиш. Факт е, че тая част на програмирането си е доста рошава и бързо човек може да полети в много грешни посоки (да не говорим какви простотии пък се пишат). Затова в случая съм съгласен да си затворя очите :)

Поздрави ! 

Редактирано от soundtracker (преглед на промените)

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Горещи теми в момента

  • Подобни теми

    • от даниел павелов
      Здравейте, форумници! Преди седмица, учителят ни по физика ни да те нещо като въпросче, но логическо, правих струвах, РАЗСЪЖДАВАХ  търсих на български, на английски, но не намерих, моля помогнете! Ето ви въпроса : МОЖЕ ЛИ ДА ВИДИТЕ ОГЛЕДАЛО?
      Мерси предварително!
    • от Магдаленаг
      Please guys if u have time to spare I'd be extremely and beyond greatful
      Да се разработи уеб сайт по тема музикални изпълнители. 
      Сайтът трябва да съдържа поне 4 страници, всяка от които да отговаря на:
      Задължително трябва да се предвиди версия за ниска разделителна способност на екрана (800 x 600 пиксела) и реализирана с CSS; за този случай може да се използва свободно избрана и 
      независима схема за разположение, като единственото изискване е за запазване на 
      използваемостта.
      Сайтът трябва да включва всички технологии - HTML/XHTML, 
      CSS, DOM, JavaScript.
      Всички страници трябва да се валидират по HTML5. Допустимо е да има минимален брой 
      грешки от валидацията.
      Сайтът трябва да бъде придружен от документация, която да включва:
      1. Заглавна страница.
      2. Задание с посочените варианти:
      /списък на елементите :
      1. Меню, съдържащо rollover бутони, реализирано чрез JavaScript. При посочване на бутон да 
      се променят неговите цвят на фона и цвят на текста. Използването на изображения за 
      бутоните е по желание на студента.
      3. Номериран списък с римски цифри и форматиран със CSS, така че всички нечетни редове 
      да бъдат в курсив (наклонени).
      4. Неномериран списък, използващ собствено изображение подредба на елементите по 
      хоризонтал (т.е. елементите да не са на нов ред).
      6. Формуляр, съдържащ текстови полета за въвеждане на собствено име, фамилно име, email, 
      голямо поле за съобщение, избор чрез радио бутони на приоритета на съобщението –
      „нисък”, „среден” или „висок” и два бутона – „Изпрати” и „Изчисти”. Чрез CSS на 
      текстовите полета и бутоните да се зададе цвят на фона и цвят на текста./
      3. Използваните HTML и CSS код, с които е реализирана зададената схема на 
      разположение:
                            header
                        навигация
                Осн                              За
      съдържание               контакти
      4. Използваният или собствен JavaScript код. 
      5. Резултати от валидацията на отделните страници.
      6. Списък на източниците, от където е заимстван готов код, текст или снимки.
    • от Ndishev
      Скоро взех този апартамент на последен етаж. 
      Има железа по терасата за да може да се затвори но малките гадини не спират да кацат по тях. Свили са си гнезда ппд покрива. 
      Става дума за много гълъби. За 2 дена превръщат терасата в сметище. 
      Пробвах със сокол, със звуци от сокол, дискове, ориз. Но просто са толкова нахални и не си тръгват. 
      Може ли някой да каже изпитан метод за прогонване защото иначе не мога да затворя терасата. 
      Ако се загради с бризент отгоре ще направят мазало което не може да се изчисти. 
      Сутрин съм виждал по над 20 гълъба, дори като излезна и тропам си тръгват част от тях. 
    • от mihaela_
      Здравейте отново, относно тази задача искам да попитам нещо.  Зададох ключови полета за „Данни от фирмата” – Име на фирмата, „Автомобили” – Рег номер, „Услуги” – Цена, „Клиенти” – ЕГН.Сега обаче трябва да създавам връзка едно към едно и едно към много, но така както съм ги направила не виждам шанс за връзка едно към едно и не мога да разбера къде е грешката. Ако някой може да посочи грешката и да ми помогне да продължа напред, ще съм му много благодарна!                                                                                                                  

    • от Pepi Litkov
      Здравейте колеги ! Спешно ми трябва една задача написана на C++ за понеделник . Много ми е труден този език и не мога да измисля никакъв код ..Ако е възможно погледнете условието : Да се напише програма,която за дадено естествено число N да намира такава тройка числа a,b,c (естествени и c<N), за която a2+b2=c2 (двойките са степен).. Благодаря ви много предварително ! 
  • Дарение

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.