|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.01.2019, 08:24 | #1 |
Новичок
Джуниор
Регистрация: 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(); } } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Переполнение кучи 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 |