Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Трябва ми малко помощ за Java

Featured Replies

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

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

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

преди 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 (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

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

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

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.