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

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


Тъй като от скоро уча, 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 потребители

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

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

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

    • от Дона Балканска
      Може ли да ми отговорите на въпроса:ако районен съд е издал решението си по даден казус може ли друг районен съд да разгледа този казус и да издаде друго съдебно решение?Няма ли в случая конфликт на интереси или е в съответствие със законите в България?
    • от Kristian Krastev
      Здравейте,написал съм едно текстово поле и една текстова област, 
      направил съм бутон "Търси",искам неговият ActionListener да взима текста от текстовото поле
      и да го търси в текстова област,или по някакъв начин да го отбелязва?
      Благодаря предварително!

    • от Kristian Krastev
      Здравейте,
      искам да попитам ако имам това:
      JLabel time = new JLabel();
      JLabel time1 = new JLabel();
              Thread clock = new Thread() {
                  public void run() {
                      for (;;) {
                      Date date = new Date();
                      SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
                      
                      time.setText(format.format(date));
                      time1.setText(format.format(date));
                      try {
                          sleep(1000);
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                  }
              }
          };
          clock.start();
       
      как да направя на time и time1 int едното минус другото, за да ми даде разликата примерно ако time е 14:00 а time1 е 14:01 
      да ми изведе времетраене 00:01 една минута.
       
      time ще е когато се натисне един бутон а time1 когато се натисне друг бутон,и
      целта е да даде разликата в времето на натискането на бутоните.
      Благодаря предварително!
    • от Kristian Krastev
      Здравейте,
      искам да попитам ако една JTextArea чете от три файла:
      файл "A" файл "B" и файл "C"
      Имали как JTextArea примерно като прочете реда от файл "A"  реда да бъде с червен цвят,
      реда от файл "B" да бъде със син цвят а реда от файл "C" да бъде с зелен цвят.
    • от Kristian Krastev
      ако int = 0;
      и после му зададеш да дава по едно число отгоре след натискане на бутон с i++;
      как мога да запазя последното дадено число от i след рестарт на програмата?
      Примерно i++; System.out.println(i); натиснал съм 50 пъти бутона и стигнало до 50 но след рестарт пак ще започне
      от 0.
      Въпроса ми е как да продължи от 50? 
  • Дарение

×

Информация

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