{"id":770,"date":"2018-11-28T05:23:52","date_gmt":"2018-11-28T02:23:52","guid":{"rendered":"http:\/\/delimuhendis.org\/?p=770"},"modified":"2022-12-20T21:10:26","modified_gmt":"2022-12-20T21:10:26","slug":"multithreading-3","status":"publish","type":"post","link":"https:\/\/www.delimuhendis.org\/?p=770","title":{"rendered":"Java ile Multithreading \u0130\u015flemleri-3 (Semaphore)"},"content":{"rendered":"\n<p>Merhaba arkada\u015flar, bug\u00fcn sizinle Java&#8217;da semaphore kullan\u0131m\u0131n\u0131 i\u015fleyece\u011fiz. Malumunuz t\u00fcm threadler e\u015f zamanl\u0131 olarak \u00e7al\u0131\u015f\u0131r ve java bunlardan ilk olu\u015fturulan\u0131n ilk \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131n garantisini vermez. \u00d6rnek verecek olursak biz Thread 1&#8217;in start() methodunu daha erken \u00e7a\u011f\u0131rmam\u0131za ra\u011fmen Thread 2 daha \u00f6nce \u00e7al\u0131\u015fmaya ba\u015flayabilir. Bu tarz durumlar bazen can s\u0131k\u0131c\u0131 olabilir. Bug\u00fcn sizinle ayn\u0131 i\u015flemi \u00f6nce normal olarak sonra da semaphore kullanarak yapaca\u011f\u0131z ve farklar\u0131 g\u00f6zlemleyece\u011fiz.<\/p>\n\n\n\n<p>ilk \u00f6nce a\u015fa\u011f\u0131daki kodu \u00e7al\u0131\u015ft\u0131ral\u0131m. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131 zaman yap\u0131c\u0131 method&#8217;da ge\u00e7ti\u011fimiz ideyi konsola yazan bir thread olu\u015fturduk ve bu \u015fekilde hangi thread&#8217;in daha \u00f6nce \u00e7al\u0131\u015fm\u0131\u015f oldu\u011funu anlad\u0131k.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Main\n{\n    public static void main(String[] args)\n    {\n        for(int i = 0; i &lt; 3; i++)\n        {\n            StandardThread thread = new StandardThread(i);\n            thread.start();\n        }\n    }\n}\n\nclass StandardThread extends Thread\n{\n    int id;\n    public StandardThread(int id)\n    {\n        this.id = id;\n    }\n    public void run()\n    {\n        System.out.println(id);\n    }\n}<\/pre>\n\n\n\n<p>Sonu\u00e7<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0\n2\n1<\/code><\/pre>\n\n\n\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi 1 numaral\u0131 thread&#8217;in start() methodu 2 numaral\u0131 threadinkinden \u00f6nce \u00e7a\u011fr\u0131lmas\u0131na ra\u011fmen Thread 2 daha erken \u00e7al\u0131\u015ft\u0131. Bu durum s\u0131ralaman\u0131n \u00f6nde oldu\u011fu programlarda soruna neden olabilir. \u015eimdi bu sorunu Semaphore kullanarak \u00e7\u00f6zece\u011fiz.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import java.util.concurrent.Semaphore;\n\npublic class Main\n{\n    public static void main(String[] args)\n    {\n        Semaphore semaphore = new Semaphore(1);\n\n        for(int i = 0; i &lt; 3; i++)\n        {\n            new SemaphoreThread(semaphore,i).start();\n        }\n    }\n}\n\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">class SemaphoreThread extends Thread\n{\n    Semaphore semaphore;\n    int id;\n    public SemaphoreThread(Semaphore semaphore,int id)\n    {\n        this.semaphore = semaphore;\n        this.id = id;\n    }\n\n    public void run()\n    {\n        try\n        {\n            semaphore.acquire();\n            System.out.println(id);\n        }\n        catch (Exception ex)\n        {\n\n        }\n        finally {\n            semaphore.release();\n        }\n    }\n}<\/pre>\n\n\n\n<p>Sonu\u00e7<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0\n1\n2<\/code><\/pre>\n\n\n\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi sonu\u00e7lar\u0131 gayet d\u00fczg\u00fcn bir s\u0131rayla ald\u0131k. \u015eimdi size s\u0131rayla ad\u0131mlar\u0131 anlataca\u011f\u0131m. \u0130lk ad\u0131mda Main thread i\u00e7erisinde Semaphore tipinden bir nesne olu\u015fturduk. Bu nesneye 1 parametresini verdik. Bu bir semaphore&#8217;u serbest b\u0131rakmadan yani release() methodunu \u00e7a\u011f\u0131rmadan maksimum ka\u00e7 threadin \u00e7al\u0131\u015ft\u0131r\u0131labilece\u011finin iznidir. \u00d6rne\u011fin ona 2 yazarsak release etmeden 3.thread \u00e7al\u0131\u015fmaz. Biz ona bir de\u011feri verdik. Thread \u00e7al\u0131\u015f\u0131r \u00e7al\u0131\u015fmaz acquire() methodunu \u00e7a\u011f\u0131rarak semaphore&#8217;u ba\u015flatt\u0131k ve \u00e7al\u0131\u015fmas\u0131n\u0131 istedi\u011fimiz kodu yazd\u0131k. i\u015flem sonunda da release() methodunu \u00e7a\u011f\u0131rarak semaphore&#8217;u serbest b\u0131rakt\u0131k.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar, bug\u00fcn sizinle Java&#8217;da semaphore kullan\u0131m\u0131n\u0131 i\u015fleyece\u011fiz. Malumunuz t\u00fcm threadler e\u015f zamanl\u0131 olarak \u00e7al\u0131\u015f\u0131r ve java bunlardan ilk olu\u015fturulan\u0131n&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1390,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[18,302,395,471,502,558],"class_list":["post-770","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programlama","tag-acquire","tag-java","tag-multithreading","tag-release","tag-semaphore","tag-thread"],"_links":{"self":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=770"}],"version-history":[{"count":2,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/770\/revisions"}],"predecessor-version":[{"id":1391,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/770\/revisions\/1391"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/media\/1390"}],"wp:attachment":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}