<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D0%94%D0%9F%2F%D0%9B%D0%B0%D0%B1_2_%D0%A0%D0%A2%D0%98_2023</id>
	<title>КДП/Лаб 2 РТИ 2023 - Историја измена</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D0%94%D0%9F%2F%D0%9B%D0%B0%D0%B1_2_%D0%A0%D0%A2%D0%98_2023"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9B%D0%B0%D0%B1_2_%D0%A0%D0%A2%D0%98_2023&amp;action=history"/>
	<updated>2026-06-04T10:29:15Z</updated>
	<subtitle>Историја измена ове странице на пројекту</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9B%D0%B0%D0%B1_2_%D0%A0%D0%A2%D0%98_2023&amp;diff=7123&amp;oldid=prev</id>
		<title>BogdanW3 у 19:22, 28. децембар 2023.</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9B%D0%B0%D0%B1_2_%D0%A0%D0%A2%D0%98_2023&amp;diff=7123&amp;oldid=prev"/>
		<updated>2023-12-28T19:22:43Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 28. децембар 2023. у 21:22&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l14&quot;&gt;Ред 14:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 14:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Изглед хијерархије фајлова:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Изглед хијерархије фајлова:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;├── client&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;├── client&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;│   └── Philosopher.java&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;│   └── Philosopher.java&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;├── common&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;├── common&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;│   └── Service.java&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;│   └── Service.java&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;└── server&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;└── server&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;├── RequestHandler.java&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;├── RequestHandler.java&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;└── Server.java&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;     &lt;/ins&gt;└── Server.java&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== &amp;lt;code&amp;gt;Philosopher.java&amp;lt;/code&amp;gt; ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== &amp;lt;code&amp;gt;Philosopher.java&amp;lt;/code&amp;gt; ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>BogdanW3</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9B%D0%B0%D0%B1_2_%D0%A0%D0%A2%D0%98_2023&amp;diff=7122&amp;oldid=prev</id>
		<title>K0v4c: Dodata stranica za lab2 rti 2023 kdp</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9B%D0%B0%D0%B1_2_%D0%A0%D0%A2%D0%98_2023&amp;diff=7122&amp;oldid=prev"/>
		<updated>2023-12-28T18:07:56Z</updated>

		<summary type="html">&lt;p&gt;Dodata stranica za lab2 rti 2023 kdp&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{tocright}}&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
&lt;br /&gt;
У зависности од групе било је потребно решити један од следеће два проблема.&lt;br /&gt;
&lt;br /&gt;
1. Решити DiningPhilosopher проблем користећи &amp;lt;code&amp;gt;ExecutorService&amp;lt;/code&amp;gt;  и где је потребно да сервер враћа филозоферу информацију када му је дозвољено да једе. Користити &amp;lt;code&amp;gt;System.currentTimeMillis()&amp;lt;/code&amp;gt; за дохватање времена и дозвоњено је користити &amp;lt;code&amp;gt;Future&amp;lt;/code&amp;gt; и друге синхронизационе примитиве за решавање задатка.&lt;br /&gt;
&lt;br /&gt;
2. TODO.&lt;br /&gt;
&lt;br /&gt;
== Решење ==&lt;br /&gt;
&lt;br /&gt;
Испод је дато решење за DiningPhilosophers.&lt;br /&gt;
&lt;br /&gt;
Изглед хијерархије фајлова:&lt;br /&gt;
.&lt;br /&gt;
├── client&lt;br /&gt;
│   └── Philosopher.java&lt;br /&gt;
├── common&lt;br /&gt;
│   └── Service.java&lt;br /&gt;
└── server&lt;br /&gt;
    ├── RequestHandler.java&lt;br /&gt;
    └── Server.java&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;Philosopher.java&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package client;&lt;br /&gt;
&lt;br /&gt;
import common.Service;&lt;br /&gt;
&lt;br /&gt;
public class Philosopher extends Thread{&lt;br /&gt;
&lt;br /&gt;
    public static final int NUM_OF_PHILOSOPHERS = 30;&lt;br /&gt;
    public static int curr_id = 0;&lt;br /&gt;
    public int id = 0;&lt;br /&gt;
    public Service service;&lt;br /&gt;
&lt;br /&gt;
    public Philosopher(Service service) {&lt;br /&gt;
        this.id = curr_id++;&lt;br /&gt;
&lt;br /&gt;
        this.service = service;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void run() {&lt;br /&gt;
&lt;br /&gt;
        while(true) {&lt;br /&gt;
            // think&lt;br /&gt;
            try {&lt;br /&gt;
                Thread.sleep((long) (Math.random() * 1000));&lt;br /&gt;
            } catch (InterruptedException e) {&lt;br /&gt;
                throw new RuntimeException(e);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            this.service.eat(this.id);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
        Philosopher[] arr = new Philosopher[NUM_OF_PHILOSOPHERS];&lt;br /&gt;
&lt;br /&gt;
        Service service = new Service(&amp;quot;localhost&amp;quot;, 4001);&lt;br /&gt;
&lt;br /&gt;
        for(int i = 0; i &amp;lt; NUM_OF_PHILOSOPHERS; i++) {&lt;br /&gt;
            arr[i] = new Philosopher(service);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        for(int i = 0; i &amp;lt; NUM_OF_PHILOSOPHERS; i++) {&lt;br /&gt;
            arr[i].start();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;Service.java&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package common;&lt;br /&gt;
&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.io.OutputStreamWriter;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
&lt;br /&gt;
public class Service {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    String host;&lt;br /&gt;
    int port;&lt;br /&gt;
&lt;br /&gt;
    public Service(String host, int port) {&lt;br /&gt;
        this.host = host;&lt;br /&gt;
        this.port = port;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void eat(int id) {&lt;br /&gt;
&lt;br /&gt;
        try (&lt;br /&gt;
                Socket socket = new Socket(this.host, this.port);&lt;br /&gt;
                BufferedReader buffered_reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));&lt;br /&gt;
                PrintWriter print_writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);&lt;br /&gt;
                ) {&lt;br /&gt;
&lt;br /&gt;
            print_writer.println(&amp;quot;eat&amp;quot;+&amp;quot;#&amp;quot;+id);&lt;br /&gt;
&lt;br /&gt;
            // Get the resource&lt;br /&gt;
            String time = buffered_reader.readLine();&lt;br /&gt;
            System.out.println(&amp;quot;Filozofer sa id: &amp;quot; + id + &amp;quot; je dobio pristup u trenutku: &amp;quot; + time);&lt;br /&gt;
&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;RequestHandler.java&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package server;&lt;br /&gt;
&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import java.util.Scanner;&lt;br /&gt;
&lt;br /&gt;
public class RequestHandler extends Thread {&lt;br /&gt;
&lt;br /&gt;
    Socket sock;&lt;br /&gt;
    Server server;&lt;br /&gt;
&lt;br /&gt;
    public RequestHandler(Socket sock, Server server) {&lt;br /&gt;
        this.sock = sock;&lt;br /&gt;
        this.server = server;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    public void run() {&lt;br /&gt;
&lt;br /&gt;
        try (&lt;br /&gt;
                Socket socket = this.sock;&lt;br /&gt;
                BufferedReader buffered_reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));&lt;br /&gt;
                PrintWriter print_writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);&lt;br /&gt;
        ) {&lt;br /&gt;
&lt;br /&gt;
            String in = buffered_reader.readLine();&lt;br /&gt;
&lt;br /&gt;
            String[] data = in.split(&amp;quot;#&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            String operation = data[0];&lt;br /&gt;
            int id = Integer.parseInt(data[1]);&lt;br /&gt;
&lt;br /&gt;
            if (&amp;quot;eat&amp;quot;.equalsIgnoreCase(operation)) {&lt;br /&gt;
                server.test(id);&lt;br /&gt;
                server.eat(buffered_reader, print_writer);&lt;br /&gt;
                server.signal(id);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;Server.java&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package server;&lt;br /&gt;
&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.net.ServerSocket;&lt;br /&gt;
import java.net.Socket;&lt;br /&gt;
import java.util.concurrent.ExecutorService;&lt;br /&gt;
import java.util.concurrent.Executors;&lt;br /&gt;
&lt;br /&gt;
public class Server {&lt;br /&gt;
&lt;br /&gt;
    ExecutorService pool;&lt;br /&gt;
    final static int MAX_THREADS = 10;&lt;br /&gt;
&lt;br /&gt;
    public static final int NUM_OF_PHILOSOPHERS = 30;&lt;br /&gt;
    int []forks;&lt;br /&gt;
    int port;&lt;br /&gt;
&lt;br /&gt;
    public Server(int port) {&lt;br /&gt;
        this.forks = new int[NUM_OF_PHILOSOPHERS];&lt;br /&gt;
&lt;br /&gt;
        for(int i = 0; i &amp;lt; NUM_OF_PHILOSOPHERS; i++) {&lt;br /&gt;
            forks[i] = 2;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        pool = Executors.newFixedThreadPool(MAX_THREADS);&lt;br /&gt;
&lt;br /&gt;
        this.port = port;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public synchronized void test(int id) {&lt;br /&gt;
        int left = (id - 1 + NUM_OF_PHILOSOPHERS) % NUM_OF_PHILOSOPHERS;&lt;br /&gt;
        int right = (id + 1 + NUM_OF_PHILOSOPHERS) % NUM_OF_PHILOSOPHERS;&lt;br /&gt;
&lt;br /&gt;
        while(forks[id] != 2) {&lt;br /&gt;
            try {&lt;br /&gt;
                wait();&lt;br /&gt;
            } catch (InterruptedException e) {&lt;br /&gt;
                throw new RuntimeException(e);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        forks[left]--;&lt;br /&gt;
        forks[right]--;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void eat(BufferedReader rd, PrintWriter pw) {&lt;br /&gt;
        pw.println(System.currentTimeMillis());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public synchronized void signal(int id){&lt;br /&gt;
        int left = (id - 1 + NUM_OF_PHILOSOPHERS) % NUM_OF_PHILOSOPHERS;&lt;br /&gt;
        int right = (id + 1 + NUM_OF_PHILOSOPHERS) % NUM_OF_PHILOSOPHERS;&lt;br /&gt;
        forks[left]++;&lt;br /&gt;
        forks[right]++;&lt;br /&gt;
&lt;br /&gt;
        notifyAll();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
        Server server = new Server(4001);&lt;br /&gt;
&lt;br /&gt;
        try (&lt;br /&gt;
                ServerSocket listener = new ServerSocket(server.port)&lt;br /&gt;
                ) {&lt;br /&gt;
            while(true) {&lt;br /&gt;
                Socket sock = listener.accept();&lt;br /&gt;
&lt;br /&gt;
//                new RequestHandler(sock, server).start();&lt;br /&gt;
&lt;br /&gt;
                server.pool.execute(new RequestHandler(sock, server));&lt;br /&gt;
            }&lt;br /&gt;
        } catch (Exception e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Лабораторијске вежбе]]&lt;/div&gt;</summary>
		<author><name>K0v4c</name></author>
	</entry>
</feed>