{"id":3138,"date":"2022-06-15T05:27:58","date_gmt":"2022-06-15T05:27:58","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/concurrency-in-java-part-1-introduction\/"},"modified":"2026-03-11T05:59:41","modified_gmt":"2026-03-11T05:59:41","slug":"samtimisvinnsla-i-java-hluti-1-inngangur","status":"publish","type":"post","link":"https:\/\/thecodest.co\/is\/blog\/concurrency-in-java-part-1-introduction\/","title":{"rendered":"Samkeppni \u00ed Java, hluti 1 \u2013 Inngangur"},"content":{"rendered":"<p>Almennt er hef\u00f0bundin forritunara\u00f0fer\u00f0 r\u00f6\u00f0bundin. Allt \u00ed forriti gerist skref fyrir skref.<br>En \u00ed raun er hli\u00f0st\u00e6\u00f0an hvernig heiminum \u00f6llum er stj\u00f3rna\u00f0 \u2013 \u00fea\u00f0 er h\u00e6fileikinn til a\u00f0 sinna fleiri en einu verkefni samt\u00edmis.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00der\u00e1\u00f0ur vs. ferli<\/h2>\n\n\n\n<p>Til a\u00f0 r\u00e6\u00f0a svo h\u00e1\u00fer\u00f3u\u00f0 efni sem <strong>samt\u00edmak\u00f6nnun \u00ed <a href=\"https:\/\/thecodest.co\/is\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a><\/strong> E\u00f0a var\u00f0andi marg\u00fer\u00e1\u00f0avinnslu, ver\u00f0um vi\u00f0 a\u00f0 semja um nokkrar sameiginlegar skilgreiningar til a\u00f0 vera viss um a\u00f0 vi\u00f0 s\u00e9um \u00e1 sama m\u00e1li.<\/p>\n\n\n\n<p>Skulum byrja \u00e1 grunnatri\u00f0unum. \u00cd heimi \u00e1n t\u00edmar\u00f6\u00f0unar h\u00f6fum vi\u00f0 tv\u00e6r tegundir samhli\u00f0a fulltr\u00faa: ferla og<br>\u00der\u00e6\u00f0ir. Ferli er einstaklingur forrits sem er \u00ed gangi. Venjulega er \u00fea\u00f0 einangra\u00f0 fr\u00e1 \u00f6\u00f0rum ferlum.<br>St\u00fdrikerfi\u00f0 ber \u00e1byrg\u00f0 \u00e1 \u00fathlutun au\u00f0linda til hvers ferlis. Ennfremur starfar \u00fea\u00f0 sem hlj\u00f3msveitarstj\u00f3ri sem<br>skipuleggur og st\u00fdrir \u00feeim.<\/p>\n\n\n\n<p>\u00der\u00e1\u00f0ur er tegund ferlis en \u00e1 l\u00e6gra stigi, \u00feess vegna er hann einnig kalla\u00f0ur l\u00e9ttur \u00fer\u00e1\u00f0ur. Margir \u00fer\u00e6\u00f0ir geta keyrt \u00ed einum<br>ferli. H\u00e9r starfar forriti\u00f0 sem \u00e1\u00e6tlunarstj\u00f3ri og st\u00fdringara\u00f0ili \u00fer\u00e1\u00f0a. \u00c1 \u00feennan h\u00e1tt vir\u00f0ast einst\u00f6k forrit gera<br>m\u00f6rg verkefni samt\u00edmis.<\/p>\n\n\n\n<p>Grunnmunurinn \u00e1 \u00fer\u00e1\u00f0um og ferlum er einangrunarstigi\u00f0. Ferli\u00f0 hefur sitt eigi\u00f0 sett af<br>au\u00f0lindir, \u00e1 me\u00f0an \u00fer\u00e1\u00f0urinn deilir <a href=\"https:\/\/thecodest.co\/is\/blog\/app-data-collection-security-risks-value-and-types-explored\/\">g\u00f6gn<\/a> me\u00f0 \u00f6\u00f0rum \u00fer\u00e1\u00f0um. \u00dea\u00f0 kann a\u00f0 vir\u00f0ast vera villuhneig\u00f0 n\u00e1lgun og \u00fea\u00f0 er \u00fea\u00f0 reyndar. Fyrir<br>N\u00fa skulum vi\u00f0 ekki einbeita okkur a\u00f0 \u00fev\u00ed, \u00fev\u00ed \u00fea\u00f0 er utan umfangs \u00feessa greinar.<\/p>\n\n\n\n<p>Ferlar, \u00fer\u00e6\u00f0ir \u2013 allt \u00ed lagi\u2026 En hva\u00f0 er samhli\u00f0a vinnsla n\u00e1kv\u00e6mlega? Samhli\u00f0a vinnsla \u00fe\u00fd\u00f0ir a\u00f0 \u00fe\u00fa getir keyrt m\u00f6rg verkefni samt\u00edmis<br>t\u00edmi. \u00dea\u00f0 \u00fe\u00fd\u00f0ir ekki a\u00f0 \u00feessar a\u00f0ger\u00f0ir \u00feurfi a\u00f0 keyra samt\u00edmis \u2013 \u00fea\u00f0 er \u00fea\u00f0 sem samhli\u00f0a vinnsla er. <strong>Samkeppni \u00ed Java<\/strong> gerir \u00fea\u00f0 heldur ekki<br>krefst \u00feess a\u00f0 \u00fe\u00fa hafir marga \u00f6rgj\u00f6rva e\u00f0a jafnvel marga kjarna. \u00deetta m\u00e1 n\u00e1 fram \u00ed umhverfi me\u00f0 einum kjarna me\u00f0 \u00fev\u00ed a\u00f0 n\u00fdta<br>samhengi-skipting.<\/p>\n\n\n\n<p>Hugtak tengt samhli\u00f0a vinnslu er fj\u00f6l\u00fer\u00e1\u00f0a vinnsla. \u00deetta er eiginleiki forrita sem gerir \u00feeim kleift a\u00f0 framkv\u00e6ma m\u00f6rg verkefni samt\u00edmis. Ekki \u00f6ll forrit nota \u00feessa n\u00e1lgun en \u00feau sem gera \u00fea\u00f0 kallast fj\u00f6l\u00fer\u00e1\u00f0a.<\/p>\n\n\n\n<p>Vi\u00f0 erum n\u00e6stum tilb\u00fain a\u00f0 hefja, bara ein skilgreining \u00ed vi\u00f0b\u00f3t. Asynchr\u00f3ni \u00fe\u00fd\u00f0ir a\u00f0 forrit framkv\u00e6mir \u00f3blokkandi a\u00f0ger\u00f0ir.<br>\u00dea\u00f0 byrjar verkefni og heldur s\u00ed\u00f0an \u00e1fram me\u00f0 \u00f6nnur verkefni \u00e1 me\u00f0an \u00fea\u00f0 b\u00ed\u00f0ur eftir svari. \u00deegar \u00fea\u00f0 f\u00e6r svari\u00f0 getur \u00fea\u00f0 <a href=\"https:\/\/thecodest.co\/is\/blog\/react-development-all-you-have-to-know\/\">react<\/a> a\u00f0 \u00fev\u00ed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Allt \u00feetta djass<\/h2>\n\n\n\n<p>A\u00f0 sj\u00e1lfgefinni stillingu, hver <strong>Java-forrit<\/strong> keyrir \u00ed einu ferli. \u00cd \u00fev\u00ed ferli er ein \u00fer\u00e1\u00f0 sem tengist <code>a\u00f0al()<\/code> a\u00f0fer\u00f0<br>ums\u00f3kn. Hins vegar, eins og \u00e1\u00f0ur hefur veri\u00f0 nefnt, er h\u00e6gt a\u00f0 n\u00fdta s\u00e9r kerfi margra \u00fer\u00e1\u00f0a innan eins<br>forrit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Keyranlegt<\/h3>\n\n\n\n<p><code>\u00der\u00e1\u00f0ur<\/code> er <strong>Java<\/strong> flokkur \u00fear sem t\u00f6frarnir eiga s\u00e9r sta\u00f0. \u00deetta er hlutager\u00f0 af fyrrnefndu \u00fer\u00e6\u00f0i. Til<br>b\u00faa til \u00feitt eigi\u00f0 \u00fer\u00e1\u00f0, \u00fe\u00fa getur st\u00e6kka\u00f0 \u00fea\u00f0 <code>\u00der\u00e1\u00f0ur<\/code> class. Hins vegar er \u00feetta ekki r\u00e1\u00f0lag\u00f0ur a\u00f0fer\u00f0arh\u00e1ttur. <code>\u00der\u00e6\u00f0ir<\/code> \u00e6tti a\u00f0 vera nota\u00f0 sem v\u00e9lb\u00fana\u00f0ur sem keyrir verkefni\u00f0. Verkefni eru hlutar af <a href=\"https:\/\/thecodest.co\/is\/dictionary\/what-is-code-refactoring\/\">k\u00f3\u00f0i<\/a> sem vi\u00f0 viljum keyra \u00ed samhli\u00f0a ham. Vi\u00f0 getum skilgreint \u00feau me\u00f0 \u00fev\u00ed a\u00f0 nota <code>Keyranlegt<\/code> vi\u00f0m\u00f3t.<\/p>\n\n\n\n<p>En n\u00f3g um kenningar, skulum vi\u00f0 l\u00e1ta k\u00f3\u00f0ann tala.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vandam\u00e1l<\/h3>\n\n\n\n<p>Gerum r\u00e1\u00f0 fyrir a\u00f0 vi\u00f0 h\u00f6fum nokkra fylki af t\u00f6lum. Fyrir hvert fylki viljum vi\u00f0 vita summu talnanna \u00ed fylkinu. Skulum<br>\u00cdmynda\u00f0u \u00fe\u00e9r a\u00f0 \u00fea\u00f0 s\u00e9u margar sl\u00edkar fylkingar og hver \u00feeirra s\u00e9 tilt\u00f6lulega st\u00f3r. \u00cd sl\u00edkum a\u00f0st\u00e6\u00f0um viljum vi\u00f0 n\u00fdta samhli\u00f0a vinnslu og leggja saman hverja fylkingu sem sitt verkefni.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">int[] a1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\nint[] a2 = {10, 10, 10, 10, 10, 10, 10, 10};\nint[] a3 = {3, 4, 3, 4, 3, 4, 2, 1, 3, 7};\n\nRunnable task1 = () -&gt; {\n    int sum = Arrays.stream(a1).sum();\n    System.out.println(\"1. Summan er: \" + sum);\n};\n\nRunnable task2 = () -&gt; {\n    int sum = Arrays.stream(a2).sum();\n    System.out.println(\"2. Summan er: \" + sum);\n};\n\nRunnable task3 = () -&gt; {\n    int sum = Arrays.stream(a3).sum();\n    System.out.println(\"3. Summan er: \" + sum);\n};\n\nnew Thread(task1).start();\nnew Thread(task2).start();\nnew Thread(task3).start();<\/code><\/pre>\n\n\n\n<p>Eins og sj\u00e1 m\u00e1 \u00ed k\u00f3\u00f0anum h\u00e9r a\u00f0 ofan <code>Keyranlegt<\/code> er virkt vi\u00f0m\u00f3t. \u00dea\u00f0 inniheldur eina abstrakta a\u00f0fer\u00f0. <code>keyra()<\/code><br>\u00e1n r\u00f6kum. The <code>Keyranlegt<\/code> \u00cdhlutaskil skulu vera innleidd af hva\u00f0a flokki sem er, \u00fear sem \u00e6tlast er til a\u00f0 eint\u00f6k hans s\u00e9u<br>framkv\u00e6mt af \u00fer\u00e6\u00f0i.<\/p>\n\n\n\n<p>\u00deegar \u00fe\u00fa hefur skilgreint verkefni getur\u00f0u b\u00fai\u00f0 til \u00fer\u00e1\u00f0 til a\u00f0 keyra \u00fea\u00f0. \u00deetta er h\u00e6gt a\u00f0 gera me\u00f0 <code>n\u00fdja \u00fer\u00e1\u00f0inn()<\/code> sm\u00ed\u00f0ara sem<br>tekur <code>Keyranlegt<\/code> sem r\u00f6kstu\u00f0ning sinn.<\/p>\n\n\n\n<p>S\u00ed\u00f0asta skrefi\u00f0 er a\u00f0 <code>hafta()<\/code> n\u00fdlega b\u00fainn \u00fer\u00e1\u00f0ur. \u00cd <a href=\"https:\/\/thecodest.co\/is\/blog\/compare-staff-augmentation-firms-that-excel-in-api-team-staffing-for-financial-technology-projects\/\">forritaskil<\/a> \u00dea\u00f0 eru l\u00edka <code>keyra()<\/code> a\u00f0fer\u00f0ir \u00ed <code>Keyranlegt<\/code> og \u00ed<br><code>\u00der\u00e1\u00f0ur<\/code>. Hins vegar er \u00fea\u00f0 ekki lei\u00f0 til a\u00f0 n\u00fdta samhli\u00f0a vinnslu \u00ed Java. Beinn kall \u00ed hvern og einn af \u00feessum a\u00f0fer\u00f0um lei\u00f0ir til<br>a\u00f0 framkv\u00e6ma verkefni\u00f0 \u00ed sama \u00fer\u00e6\u00f0inum <code>a\u00f0al()<\/code> a\u00f0fer\u00f0ir keyra.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00der\u00e1\u00f0ap\u00f3llar og framkv\u00e6mdarar<\/h3>\n\n\n\n<p>\u00deegar verkefnin eru m\u00f6rg er ekki g\u00f3\u00f0 hugmynd a\u00f0 b\u00faa til a\u00f0skilda \u00fer\u00e1\u00f0 fyrir hvert \u00feeirra. A\u00f0 b\u00faa til <code>\u00der\u00e1\u00f0ur<\/code> er<br>\u00deetta er umfangsmikil a\u00f0ger\u00f0 og mun betra er a\u00f0 endurn\u00fdta n\u00faverandi \u00fer\u00e6\u00f0i en a\u00f0 b\u00faa til n\u00fdja.<\/p>\n\n\n\n<p>\u00deegar forrit b\u00fdr til marga skammt\u00edma \u00fer\u00e6\u00f0i er betra a\u00f0 nota \u00fer\u00e1\u00f0apott. \u00der\u00e1\u00f0apotturinn inniheldur fj\u00f6lda<br>tilb\u00fain til keyrslu en n\u00fa ekki virk \u00fer\u00e6\u00f0ir. Gefa <code>Keyranlegt<\/code> a\u00f0 sundlauginni veldur \u00fev\u00ed a\u00f0 einn af \u00fer\u00e1\u00f0unum kallar<br><code>keyra()<\/code> a\u00f0fer\u00f0 gefin <code>Keyranlegt<\/code>. Eftir a\u00f0 verkefni er loki\u00f0 er \u00fer\u00e1\u00f0urinn enn til sta\u00f0ar og \u00ed bi\u00f0ham.<\/p>\n\n\n\n<p>Ok, \u00fe\u00fa skilur \u00fea\u00f0 \u2013 kj\u00f3sa\u00f0u \u00fer\u00e1\u00f0apottinn frekar en a\u00f0 b\u00faa til \u00fer\u00e6\u00f0i handvirkt. En hvernig getur\u00f0u n\u00fdtt \u00fer\u00e1\u00f0apotta? The <code>Skiptastj\u00f3rar<\/code><br>class hefur fj\u00f6lda stat\u00edskra verksmi\u00f0jua\u00f0fer\u00f0a til a\u00f0 b\u00faa til \u00fer\u00e1\u00f0alaugar. Til d\u00e6mis <code>n\u00fdrCachedThredPool()<\/code> b\u00fdr til<br>sj\u00f3\u00f0ur \u00fear sem n\u00fdjar \u00fer\u00e6\u00f0ir eru b\u00fanar til eftir \u00fe\u00f6rfum og au\u00f0ar \u00fer\u00e6\u00f0ir eru geymdar \u00ed 60 sek\u00fandur. \u00cd m\u00f3ts\u00f6gn,<br><code>n\u00fdrF\u00f6st\u00der\u00e1\u00f0aSj\u00f3\u00f0ur()<\/code> Inniheldur fast sett af \u00fer\u00e1\u00f0um, \u00fear sem au\u00f0ir \u00fer\u00e6\u00f0ir eru geymdir \u00f3\u00e1kve\u00f0i\u00f0.<\/p>\n\n\n\n<p>Sj\u00e1um hvernig \u00feetta g\u00e6ti virka\u00f0 \u00ed d\u00e6minu okkar. N\u00fa \u00feurfum vi\u00f0 ekki a\u00f0 b\u00faa til \u00fer\u00e6\u00f0i handvirkt. \u00cd sta\u00f0inn ver\u00f0um vi\u00f0 a\u00f0 b\u00faa til<br><code>Vi\u00f0skipta\u00fej\u00f3nusta<\/code> sem b\u00fd\u00f0ur upp \u00e1 \u00fer\u00e1\u00f0asafn. S\u00ed\u00f0an getum vi\u00f0 \u00fathluta\u00f0 verkefnum til \u00feess. S\u00ed\u00f0asta skrefi\u00f0 er a\u00f0 loka \u00fer\u00e6\u00f0inum.<br>pool til a\u00f0 for\u00f0ast minnisleka. Restin af fyrri k\u00f3\u00f0anum er \u00f3breytt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">ExecutorService executor = Executors.newCachedThreadPool();\n\nexecutor.submit(task1);\nexecutor.submit(task2);\nexecutor.submit(task3);\n\nexecutor.shutdown();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Kallanlegur<\/h3>\n\n\n\n<p><code>Keyranlegt<\/code> Vir\u00f0ist vera snjall h\u00e1ttur til a\u00f0 b\u00faa til samhli\u00f0a verkefni en \u00fea\u00f0 hefur einn st\u00f3ran galla. \u00dea\u00f0 getur ekki skila\u00f0 neinu<br>gildi. Enn fremur getum vi\u00f0 ekki \u00e1kvar\u00f0a\u00f0 hvort verkefni s\u00e9 loki\u00f0 e\u00f0a ekki. Vi\u00f0 vitum heldur ekki hvort \u00fev\u00ed hafi veri\u00f0 loki\u00f0.<br>venjulega e\u00f0a undantekningarlaust. Lausnin vi\u00f0 \u00feessum kvillum er <code>Kallanlegur<\/code>.<\/p>\n\n\n\n<p><code>Kallanlegur<\/code> er svipa\u00f0 og <code>Keyranlegt<\/code> \u00c1 einhvern h\u00e1tt umlykur \u00fea\u00f0 einnig \u00f3samstilltar a\u00f0ger\u00f0ir. Helsti munurinn er s\u00e1 a\u00f0 \u00fea\u00f0 getur<br>Skila gildi. Skilagildi getur veri\u00f0 af hva\u00f0a (ekki frumst\u00e6\u00f0um) ger\u00f0 sem er, \u00fear sem <code>Kallanlegur<\/code> interface er breytut\u00fdpa.<br><code>Kallanlegur<\/code> er virkt vi\u00f0m\u00f3t sem hefur <code>kalla()<\/code> a\u00f0fer\u00f0 sem getur kasta\u00f0 <code>Undantekning<\/code>.<\/p>\n\n\n\n<p>N\u00fa skulum vi\u00f0 sj\u00e1 hvernig vi\u00f0 getum n\u00fdtt okkur <code>Kallanlegur<\/code> \u00ed fylkism\u00e1linu okkar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">int[] a1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\nint[] a2 = {10, 10, 10, 10, 10, 10, 10, 10};\nint[] a3 = {3, 4, 3, 4, 3, 4, 2, 1, 3, 7};\n\nCallable task1 = () -&gt; Arrays.stream(a1).sum();\nCallable task2 = () -&gt; Arrays.stream(a2).sum();\nCallable task3 = () -&gt; Arrays.stream(a3).sum();\n\nExecutorService executor = Executors.newCachedThreadPool();\nFuture future1 = executor.submit(task1);\nFuture future2 = executor.submit(task2);\nFuture future3 = executor.submit(task3);\n\nSystem.out.println(\"1. Summan er: \" + future1.get());\nSystem.out.println(\"2. Summan er: \" + future2.get());\nSystem.out.println(\"3. Summan er: \" + future3.get());\n\nexecutor.shutdown();<\/code><\/pre>\n\n\n\n<p>Allt \u00ed lagi, vi\u00f0 sj\u00e1um hvernig <code>Kallanlegur<\/code> er b\u00fai\u00f0 til og s\u00ed\u00f0an sent til <code>Vi\u00f0skipta\u00fej\u00f3nusta<\/code>. En hva\u00f0 \u00ed \u00f3sk\u00f6punum er <code>Framt\u00ed\u00f0<\/code>?<br><code>Framt\u00ed\u00f0<\/code> starfar sem br\u00fa milli \u00fer\u00e1\u00f0a. Summa hvers fylkis er framleidd \u00ed a\u00f0skildum \u00fer\u00e6\u00f0i og vi\u00f0 \u00feurfum lei\u00f0 til a\u00f0<br>F\u00e1\u00f0u \u00feessar ni\u00f0urst\u00f6\u00f0ur til baka til <code>a\u00f0al()<\/code>.<\/p>\n\n\n\n<p>Til a\u00f0 s\u00e6kja ni\u00f0urst\u00f6\u00f0una fr\u00e1 <code>Framt\u00ed\u00f0<\/code> Vi\u00f0 \u00feurfum a\u00f0 hringja <code>f\u00e1()<\/code> a\u00f0fer\u00f0. H\u00e9r geta tv\u00e6r hlutir gerst. \u00cd fyrsta lagi,<br>ni\u00f0ursta\u00f0a \u00fatreiknings sem framkv\u00e6mdur var af <code>Kallanlegur<\/code> er tilt\u00e6kt. \u00de\u00e1 f\u00e1um vi\u00f0 \u00fea\u00f0 strax. \u00cd \u00f6\u00f0ru lagi er ni\u00f0ursta\u00f0an ekki<br>Ertu tilb\u00fainn enn\u00fe\u00e1? Annars <code>f\u00e1()<\/code> a\u00f0fer\u00f0in mun st\u00f6\u00f0va vinnuna \u00fear til ni\u00f0ursta\u00f0an liggur fyrir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reiknanleg framt\u00ed\u00f0<\/h3>\n\n\n\n<p>Vandam\u00e1li\u00f0 me\u00f0 <code>Framt\u00ed\u00f0<\/code> er a\u00f0 \u00fea\u00f0 virkar \u00ed \u2018push-parad\u00edgunni\u2019. \u00deegar nota\u00f0 er <code>Framt\u00ed\u00f0<\/code> \u00de\u00fa ver\u00f0ur a\u00f0 vera eins og yfirma\u00f0ur sem<br>spyr st\u00f6\u00f0ugt: \u2018Er verkefni\u00f0 b\u00fai\u00f0? Er \u00fea\u00f0 tilb\u00fai\u00f0?\u2019 \u00fear til \u00fea\u00f0 skilar ni\u00f0urst\u00f6\u00f0u. A\u00f0 starfa undir st\u00f6\u00f0ugum \u00fer\u00fdstingi er<br>D\u00fdrt. Mun betri n\u00e1lgun v\u00e6ri a\u00f0 panta <code>Framt\u00ed\u00f0<\/code> Hva\u00f0 \u00e1 a\u00f0 gera \u00feegar \u00fea\u00f0 hefur loki\u00f0 verkefni s\u00ednu. \u00dev\u00ed mi\u00f0ur,<br><code>Framt\u00ed\u00f0<\/code> get ekki gert \u00fea\u00f0 en <code>Reiknanleg framt\u00ed\u00f0<\/code> getur.<\/p>\n\n\n\n<p><code>Reiknanleg framt\u00ed\u00f0<\/code> starfar \u00ed \u2018pull-parad\u00edgu\u2019. Vi\u00f0 getum sagt \u00fev\u00ed hva\u00f0 \u00e1 a\u00f0 gera vi\u00f0 ni\u00f0urst\u00f6\u00f0una \u00feegar \u00fea\u00f0 hefur loki\u00f0 verkefnum s\u00ednum. \u00dea\u00f0<br>er d\u00e6mi um \u00f3samstilltan n\u00e1lgun.<\/p>\n\n\n\n<p><code>Reiknanleg framt\u00ed\u00f0<\/code> virkar fullkomlega me\u00f0 <code>Keyranlegt<\/code> en ekki me\u00f0 <code>Kallanlegur<\/code>. \u00cd sta\u00f0inn er h\u00e6gt a\u00f0 afhenda verkefni til<br><code>Reiknanleg framt\u00ed\u00f0<\/code> \u00ed formi af <code>Birgir<\/code>.<\/p>\n\n\n\n<p>Sko\u00f0um hvernig hi\u00f0 fyrrnefnda tengist vandam\u00e1linu okkar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">int[] a1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\nint[] a2 = {10, 10, 10, 10, 10, 10, 10, 10};\nint[] a3 = {3, 4, 3, 4, 3, 4, 2, 1, 3, 7};\n\nCompletableFuture.supplyAsync(() -&gt; Arrays.stream(a1).sum())\n .thenAccept(System.out::println);\n\nCompletableFuture.supplyAsync(() -&gt; Arrays.stream(a2).sum())\n .thenAccept(System.out::println);\n\nCompletableFuture.supplyAsync(() -&gt; Arrays.stream(a3).sum())\n .thenAccept(System.out::println);<\/code><\/pre>\n\n\n\n<p>\u00dea\u00f0 fyrsta sem tekur \u00feig \u00e1 \u00f3vart er hversu miklu styttra \u00feetta lausn er. A\u00f0 auki l\u00edtur h\u00fan snyrtileg og vel skipul\u00f6g\u00f0 \u00fat.<\/p>\n\n\n\n<p>Verkefni til <code>Framt\u00ed\u00f0 sem h\u00e6gt er a\u00f0 lj\u00faka<\/code> getur veri\u00f0 veitt af <code>Birg\u00f0asamstillt()<\/code> a\u00f0fer\u00f0 sem tekur <code>Birgir<\/code> e\u00f0a me\u00f0 <code>keyraAsynchr\u00f3nt()<\/code> a\u00f0<br>tekur <code>Keyranlegt<\/code>. Callback \u2013 k\u00f3\u00f0abrot sem \u00e1 a\u00f0 keyra \u00feegar verkefni l\u00fdkur \u2013 er skilgreint af <code>\u00fe\u00e1 sam\u00feykkja()<\/code><br>a\u00f0fer\u00f0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c1lyktanir<\/h2>\n\n\n\n<p><strong>Java<\/strong> veitir margar mismunandi n\u00e1lganir a\u00f0 samhli\u00f0a vinnslu. \u00cd \u00feessari grein snerumst vi\u00f0 varla um efni\u00f0.<\/p>\n\n\n\n<p>Engu a\u00f0 s\u00ed\u00f0ur f\u00f3rum vi\u00f0 yfir grunnatri\u00f0in \u00ed <code>\u00der\u00e1\u00f0ur<\/code>, <code>Keyranlegt<\/code>, <code>Kallanlegur<\/code>, og <code>Kallanlegt framt\u00ed\u00f0<\/code> sem er g\u00f3\u00f0 spurning<br>fyrir frekari ranns\u00f3kn \u00e1 umfj\u00f6llunarefninu.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thecodest.co\/contact\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1283\" height=\"460\" src=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_.png\" alt=\"\" class=\"wp-image-4927\" srcset=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_.png 1283w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-300x108.png 300w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-1024x367.png 1024w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-768x275.png 768w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-18x6.png 18w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-67x24.png 67w\" sizes=\"auto, (max-width: 1283px) 100vw, 1283px\" \/><\/a><\/figure>","protected":false},"excerpt":{"rendered":"<p>Lesi\u00f0 fyrsta hluta bloggser\u00edunnar okkar sem er helgu\u00f0 samhli\u00f0a vinnslu \u00ed Java. \u00cd n\u00e6sta grein munum vi\u00f0 sko\u00f0a n\u00e1nar muninn \u00e1 \u00fer\u00e1\u00f0um og ferlum, \u00fer\u00e1\u00f0ap\u00f3la, framkv\u00e6mdara\u00f0ila og margt fleira!<\/p>","protected":false},"author":2,"featured_media":3139,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3138","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Concurrency in Java Part 1 - Introduction - The Codest<\/title>\n<meta name=\"description\" content=\"Read the first part of our blog series devoted to concurrency in Java.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/is\/blogg\/samtimisvinnsla-i-java-hluti-1-inngangur\/\" \/>\n<meta property=\"og:locale\" content=\"is_IS\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Concurrency in Java Part 1 - Introduction\" \/>\n<meta property=\"og:description\" content=\"Read the first part of our blog series devoted to concurrency in Java.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/is\/blogg\/samtimisvinnsla-i-java-hluti-1-inngangur\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-15T05:27:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-11T05:59:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/concurrency_in_java_part_1_-_introduction.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Concurrency in Java Part 1 &#8211; Introduction\",\"datePublished\":\"2022-06-15T05:27:58+00:00\",\"dateModified\":\"2026-03-11T05:59:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/\"},\"wordCount\":1295,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/concurrency_in_java_part_1_-_introduction.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"is\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/\",\"name\":\"Concurrency in Java Part 1 - Introduction - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/concurrency_in_java_part_1_-_introduction.png\",\"datePublished\":\"2022-06-15T05:27:58+00:00\",\"dateModified\":\"2026-03-11T05:59:41+00:00\",\"description\":\"Read the first part of our blog series devoted to concurrency in Java.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/#breadcrumb\"},\"inLanguage\":\"is\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"is\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/concurrency_in_java_part_1_-_introduction.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/concurrency_in_java_part_1_-_introduction.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/concurrency-in-java-part-1-introduction\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Concurrency in Java Part 1 &#8211; Introduction\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"is\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"is\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"is\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/is\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Samkeppni \u00ed Java, hluti 1 \u2013 Inngangur \u2013 The Codest","description":"Lestu fyrsta hluta bloggser\u00edu okkar sem er helgu\u00f0 samhli\u00f0a vinnslu \u00ed Java.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/is\/blogg\/samtimisvinnsla-i-java-hluti-1-inngangur\/","og_locale":"is_IS","og_type":"article","og_title":"Concurrency in Java Part 1 - Introduction","og_description":"Read the first part of our blog series devoted to concurrency in Java.","og_url":"https:\/\/thecodest.co\/is\/blogg\/samtimisvinnsla-i-java-hluti-1-inngangur\/","og_site_name":"The Codest","article_published_time":"2022-06-15T05:27:58+00:00","article_modified_time":"2026-03-11T05:59:41+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/concurrency_in_java_part_1_-_introduction.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Concurrency in Java Part 1 &#8211; Introduction","datePublished":"2022-06-15T05:27:58+00:00","dateModified":"2026-03-11T05:59:41+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/"},"wordCount":1295,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/concurrency_in_java_part_1_-_introduction.png","articleSection":["Software Development"],"inLanguage":"is","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/","url":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/","name":"Samkeppni \u00ed Java, hluti 1 \u2013 Inngangur \u2013 The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/concurrency_in_java_part_1_-_introduction.png","datePublished":"2022-06-15T05:27:58+00:00","dateModified":"2026-03-11T05:59:41+00:00","description":"Lestu fyrsta hluta bloggser\u00edu okkar sem er helgu\u00f0 samhli\u00f0a vinnslu \u00ed Java.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/#breadcrumb"},"inLanguage":"is","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/"]}]},{"@type":"ImageObject","inLanguage":"is","@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/concurrency_in_java_part_1_-_introduction.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/concurrency_in_java_part_1_-_introduction.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/concurrency-in-java-part-1-introduction\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Concurrency in Java Part 1 &#8211; Introduction"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"is"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"is","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"is","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/is\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/posts\/3138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/comments?post=3138"}],"version-history":[{"count":8,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/posts\/3138\/revisions"}],"predecessor-version":[{"id":8551,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/posts\/3138\/revisions\/8551"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/media\/3139"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/media?parent=3138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/categories?post=3138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/tags?post=3138"}],"curies":[{"name":"vp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}