Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2019, 08:24   #1
eroman
Новичок
Джуниор
 
Регистрация: 21.01.2019
Сообщений: 1
По умолчанию Java help

Имеется Map<String, Integer> в который записывается кол-во посещений страниц сайта.
Создать 50 потоков , имитирующих клиентские соединения от 5 страниц по 10 параллельных запросов,
в которых увеличивать счетчик своей страницы. Оценить корректность работы и производительность.

Тут нет многопоточности , как её реализовать

import java.util.*;
import java.util.concurrent.atomic.AtomicI nteger;

public class Counterr {

Map<String, Integer> mySite = new LinkedHashMap<String, Integer>();
Random rand = new Random();

private static AtomicInteger threadCount = new AtomicInteger(0);

public void execute() throws InterruptedException {

int numberAll = 10;
for (int i = 0; i < 50; i++) {
threadCount.incrementAndGet();
}
System.out.println("threadCount (before) = " + threadCount.get());


for (int i = 1; i <= numberAll; i++) {
mySite.put("http://mysite.ru/page".concat(Integer.toString(i)),0 );
}


long start = System.currentTimeMillis();
String[] url = new String[5];
for (int i = 0; i < 50; i++) {
for (int k=0;k<5;k++){
url[k] = "http://mysite.ru/page".concat(Integer.toString(rand. nextInt(numberAll)+1));
}
User visitor = new User(url);
new Thread(visitor).start();
Thread.sleep(5);

}
System.out.println("-------------------------");
System.out.println(System.currentTi meMillis() - start) + " mls");
System.out.println("-------------------------");
Thread.sleep(500);


//вывод на экран страниц с частотой их посещения
int counterAll = 0;
for (Map.Entry<String, Integer> entry : mySite.entrySet()) {
System.out.println("Страница сайта: "+entry.getKey()+" ; Количество посещений: "+entry.getValue());
counterAll = counterAll + entry.getValue();
}
Thread.sleep(500);
System.out.println("-------------------------");
Thread.sleep(500);
System.out.println("Всего посещений сайта: ".concat(Integer.toString(counterAl l)));
System.out.println("threadCount (after) = " + threadCount.get());
}

private class User implements Runnable {

private String[] url;
public User(String[] url) {
this.url = url;
}

@Override
public void run() {
for (int i=1;i<=10;i++){
for (int j=0;j<5;j++){
synchronized (mySite.get(url[j])) {
mySite.put(url[j], mySite.get(url[j]) + 1);
Thread.yield();
}
}
}
threadCount.decrementAndGet();
}
}

public static void main(String[] args) throws InterruptedException {
new Counterr().execute();
}
}
eroman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переполнение кучи java.lang.OutOfMemoryError: Java heap space Karik_ Java Базы данных (JDBC, JPA, Hibernate) 4 09.03.2017 12:04
JAVA. Написать один метод на java для существующей реализации squadgazzz Фриланс 1 14.02.2017 14:04
Помогите справиться с java.lang.OutOfMemoryError: Java heap space Levilaulada Помощь студентам 1 17.05.2009 10:59