1"use strict";(self.webpackChunksample=self.webpackChunksample||[]).push([[4768],{35949:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>h,contentTitle:()=>i,default:()=>s,frontMatter:()=>d,metadata:()=>o,toc:()=>l});var t=r(74848),a=r(28453);const d={slug:"Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d, \uadf8\ub9ac\uace0 Thread \uc8fd\uc774\uae30",title:"Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d, \uadf8\ub9ac\uace0 Thread \uc8fd\uc774\uae30",authors:"ryukato",date:new Date("2014-12-24T09:36:55.000Z"),tags:["Java","thread","kill-thread"]},i="Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d, \uadf8\ub9ac\uace0 Thread \uc8fd\uc774\uae30",o={permalink:"/blog/Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d, \uadf8\ub9ac\uace0 Thread \uc8fd\uc774\uae30",source:"@site/blog/2014-12-24-thread-run-and-kill-thread.md",title:"Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d, \uadf8\ub9ac\uace0 Thread \uc8fd\uc774\uae30",description:"\ud68c\uc0ac\uc5d0\uc11c \uc5ec\ub7ec Thread \ud639\uc740 \ud558\ub098\uc758 Thread\ub97c \uc8fd\uc774\ub294 \uc720\ud2f8 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc11c Test\ub97c \ud558\ub294\ub370 \uc8fd\uc774\uace0 \ub09c \ub2f4\uc5d0 \uc0b4\uc544 \uc788\ub294 Thread\uac00 \uc5c6\ub294\uc9c0\ub97c assert\ud558\ub294 \uad6c\ubd84\uc5d0\uc11c \uc790\uafb8 fail\uc774 \ub098\ub294 \uac70\uc600\ub2e4. \uadf8\ub798\uc11c \uc774\uc720\ub97c \ucc3e\uc544 \ubcf4\ub2c8 Mock\uc73c\ub85c \ub9cc\ub4e0 \ud14c\uc2a4\ud2b8\uc6a9 Thread\uc758 run\uba54\uc11c\ub4dc\uc5d0 \ubb38\uc81c\uac00 \uc788\uc5c8\ub2e4.",date:"2014-12-24T09:36:55.000Z",tags:[{label:"Java",permalink:"/blog/tags/java"},{label:"thread",permalink:"/blog/tags/thread"},{label:"kill-thread",permalink:"/blog/tags/kill-thread"}],readingTime:4.37,hasTruncateMarker:!0,authors:[{name:"Ryukato",title:"BackEnd Software Developer",url:"https://github.com/ryukato",imageURL:"https://github.com/ryukato.png",key:"ryukato"}],frontMatter:{slug:"Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d, \uadf8\ub9ac\uace0 Thread \uc8fd\uc774\uae30",title:"Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d, \uadf8\ub9ac\uace0 Thread \uc8fd\uc774\uae30",authors:"ryukato",date:"2014-12-24T09:36:55.000Z",tags:["Java","thread","kill-thread"]},unlisted:!1,prevItem:{title:"Converting two dimension array to one dimension array.",permalink:"/blog/Converting two dimension array to one dimension array."},nextItem:{title:"Thread\uc5d0\uc11c \ubc1c\uc0dd\ud55c \uc608\uc678 \ucc98\ub9ac\ud558\uae30",permalink:"/blog/Thread\uc5d0\uc11c \ubc1c\uc0dd\ud55c \uc608\uc678 \ucc98\ub9ac\ud558\uae30"}},h={authorsImageUrls:[void 0]},l=[{value:"Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d",id:"thread-run-\uba54\uc11c\ub4dc-\uc120\uc5b8-\uc2dc-\uc720\uc758\uc0ac\ud56d",level:2},{value:"\uc798\ubabb\ub41c run \uba54\uc11c\ub4dc",id:"\uc798\ubabb\ub41c-run-\uba54\uc11c\ub4dc",level:3},{value:"\uad1c\ucc2e\uc740 run \uba54\uc11c\ub4dc",id:"\uad1c\ucc2e\uc740-run-\uba54\uc11c\ub4dc",level:3},{value:"Thread \uc8fd\uc774\uae30",id:"thread-\uc8fd\uc774\uae30",level:2}];function u(e){const n={code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"\ud68c\uc0ac\uc5d0\uc11c \uc5ec\ub7ec Thread \ud639\uc740 \ud558\ub098\uc758 Thread\ub97c \uc8fd\uc774\ub294 \uc720\ud2f8 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc11c Test\ub97c \ud558\ub294\ub370 \uc8fd\uc774\uace0 \ub09c \ub2f4\uc5d0 \uc0b4\uc544 \uc788\ub294 Thread\uac00 \uc5c6\ub294\uc9c0\ub97c assert\ud558\ub294 \uad6c\ubd84\uc5d0\uc11c \uc790\uafb8 fail\uc774 \ub098\ub294 \uac70\uc600\ub2e4. \uadf8\ub798\uc11c \uc774\uc720\ub97c \ucc3e\uc544 \ubcf4\ub2c8 Mock\uc73c\ub85c \ub9cc\ub4e0 \ud14c\uc2a4\ud2b8\uc6a9 Thread\uc758 run\uba54\uc11c\ub4dc\uc5d0 \ubb38\uc81c\uac00 \uc788\uc5c8\ub2e4.\n\uadf8\ub798\uc11c \ub3d9\uc77c\ud55c \uc2e4\uc218\ub97c \ubc18\ubcf5\ud558\uc9c0 \ub9d0\uc544\uc57c\ud558\uaca0\ub2e8 \uc758\ub3c4\uc5d0\uc11c \uae30\ub85d\uc744 \ub0a8\uae34\ub2e4."}),"\n",(0,t.jsx)(n.h2,{id:"thread-run-\uba54\uc11c\ub4dc-\uc120\uc5b8-\uc2dc-\uc720\uc758\uc0ac\ud56d",children:"Thread run \uba54\uc11c\ub4dc \uc120\uc5b8 \uc2dc \uc720\uc758\uc0ac\ud56d"}),"\n",(0,t.jsx)(n.h3,{id:"\uc798\ubabb\ub41c-run-\uba54\uc11c\ub4dc",children:"\uc798\ubabb\ub41c run \uba54\uc11c\ub4dc"}),"\n",(0,t.jsx)(n.p,{children:"\uc544\ub798\uc758 \ucf54\ub4dc \uc608\uc81c\uc5b4\uc11c 1\ucd08\ub3d9\uc548 sleep\uc744 \ud55c\ub2e4. \uc774 sleep \uc2dc\uac04 \ub3d9\uc548 Interruption\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 InterruptedException\uc744 \uc7a1\ub294 cat
1ch\ubb38\uc744 \ub123\uc5b4 \ub193\uc558\ub2e4.\n\ud558\uc9c0\ub9cc catch\ubb38\uc5d0\uc11c \ubcc4\ub2e4\ub978 \ucc98\ub9ac \uc5c6\uc774 \u201cInterrupted\u201d\ub77c\ub294 \ubb38\uad6c\ub9cc \ucd9c\ub825\ud55c\ub2e4. \uc774\uac83\uc774 \ubb38\uc81c\ub2e4. \uc65c\ub0d0\uba74 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud558\ub294 \uc2dc\uc810\uc5d0 \ud574\ub2f9 Thread\uc758 interrupted flag\ub294 \ucd08\uae30\ud654\ub418\ub294\ub370, \uc608\uc678\ub97c \uc7a1\uae34 \ud588\uc9c0\ub9cc \uc608\uc678\ub97c \ud638\ucd9c\ud55c \ucabd \ud639\uc740 JVM\uc73c\ub85c \ub358\uc838\uc57c \ud560 \uc608\uc678\ub97c \uba39\uc740 \uac83\uc774\ub2e4.\n\uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \ud574\ub2f9 run \uba54\uc11c\ub4dc\uc758 while loop\ub97c \ud55c\ubc88 \ub354 \ud0c0\uac8c \ub41c\ub2e4. \uadf8\ub9ac\uace0 \ub2e4\uc2dc 1\ucd08\ub3d9\uc548 sleep\uc744 \ud55c\ub2e4.\n\uc989, \ud574\ub2f9 Thread\uac00 \uc8fd\uc5c8\ub294\uc9c0\ub97c assert\ud558\ub294 \uc2dc\uc810\uc5d0 \ud574\ub2f9 thread\ub294 \uc0b4\uc544 \uc788\ub294 \uc0c1\ud0dc\uac00 \ub41c\ub2e4. \uadf8\ub807\uae30\ub54c\ubb38\uc5d0 assert\ub294 fail\uc774 \ub418\ub294 \uac83\uc774\ub2e4."}),"\n",(0,t.jsx)(n.p,{children:"\uc544\ub798\uc758 catch \uad6c\ubb38\uc774 \ubb38\uc81c\ub2e4."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"catch(InterruptedException e){\n //ignore\n System.out.println(\u201cInterrupted\u201d);\n}\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'private static class ThreadHasWrongRunMethod extends Thread{\n private ThreadHasWrongRunMethod(){}\n private int loopCounnt = 0;\n public static Thread create(){\n return new ThreadHasWrongRunMethod();\n }\n\n @Override\n public void run(){\n while(!Thread.currentThread().isInterrupted()){\n try{\n /*\n * do some work or process\n */\n System.out.println("loopCounnt :"+ (++loopCounnt));\n Thread.sleep(50);\n }catch(InterruptedException e){\n //ignore\n System.out.println("Interrupted");\n }\n }\n }\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"\uad1c\ucc2e\uc740-run-\uba54\uc11c\ub4dc",children:"\uad1c\ucc2e\uc740 run \uba54\uc11c\ub4dc"}),"\n",(0,t.jsx)(n.p,{children:"sleep\uc744 \ud558\ub294 \ub3d9\uc548 \ubc1c\uc0dd\ud55c interruption\uc744 \uc7a1\ub294 catch\uc5d0\uc11c while loop\ub97c \ube60\uc838 \ub098\uac00\uae30 \uc704\ud55c break\uc640 \ud574\ub2f9 Thread\ub97c \ub2e4\uc2dc \ud55c\ubc88 interrupt\ub97c \uac70\ub294 \ucf54\ub4dc\uac00 \ucd94\uac00 \ub418\uc5c8\ub2e4.\n\uadf8 \uc774\uc720\ub294 \uc704\uc758 \uc798\ubabb\ub41c \uc608\uc758 \uc124\uba85\ub41c \ubd80\ubd84\uc744 \ubcf4\uba74 \uc54c \uc218 \uc788\uc744 \uac83\uc73c\ub85c \uc0dd\uac01\ub41c\ub2e4. \uadf8\ub7f0\ub370 \ub2e4\uc2dc \ud55c\ubc88 interrupt\ub97c \uac70\ub294 \uc774\uc720\ub294 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud558\ub294 \uc2dc\uc810\uc5d0 \ud574\ub2f9 Thread\uc758 interrupted flag\ub294 \ucd08\uae30\ud654\uac00 \ub41c\ub2e4. \ud655\uc2e4\ud788 while\uc744 \uc885\ub8cc\ud558\uae30 \uc704\ud574 interrupt\ub97c \ub2e4\uc2dc \ud638\ucd9c\ud55c \uac83\uc774\ub2e4. \uadf8\ub9ac\uace0 \ub9cc\uc57d while\ubb38 \uc548\uc5d0 \ub610\ub2e4\ub978 inner loop\uac00 \uc788\uace0 inner loop\uc548\uc5d0\uc11c sleep \ubc0f InterruptedException\uc744 catch\ud558\ub294 \uad6c\ubb38\uc774 \uc788\ub2e4\uba74 outer loop \uc778 while loop\uc5d0\uc11c \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub2e4. \ub530\ub77c\uc11c \ud655\uc2e4\ud788 \ud574\ub2f9 Thread\ub97c \uc885\ub8cc\ud558\uae30 \uc704\ud574 interrupt\ub97c \ub2e4\uc2dc \ud638\ucd9c\ud558\ub294 \uac83\uc774 \uc88b\ub2e4\uace0 \uc0dd\uac01\ub41c\ub2e4."}),"\n",(0,t.jsx)(n.p,{children:"loop\ub97c \ube60\uc838 \ub098\uc624\uae34 \uc704\ud55c break\uc640 Thread.currentThread().interrupt()\ub97c \ud638\ucd9c\ud558\uc5ec \ud574\ub2f9 Thread\ub97c \ud655\uc2e4\ud788 interrupt\ub97c \ud55c\ub2e4."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"catch(InterruptedException e) {\n System.out.println(\u201cInterrupted\u201d);\n Thread.currentThread().interrupt();\n break;\n}\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'private static class MockThreadKeepRunning extends Thread{\n private int loopCounnt = 0;\n private MockThreadKeepRunning(){}\n public static Thread create(){\n return new MockThreadKeepRunning();\n }\n\n @Override\n public void run(){\n while(!Thread.currentThread().isInterrupted()){\n try{\n System.out.println("loopCounnt :"+ (++loopCounnt));\n Thread.sleep(50);\n }catch(InterruptedException e){\n System.out.println("Interrupted");\n Thread.currentThread().interrupt();\n break;\n }\n }\n }\n}\n'})}),"\n",(0,t.jsx)(n.h2,{id:"thread-\uc8fd\uc774\uae30",children:"Thread \uc8fd\uc774\uae30"}),"\n",(0,t.jsx)(n.p,{children:"Java API\uc5d0\ub294 stop\uba54\uc11c\ub4dc\uac00 \ud45c\uc2dc\ub294 \ub418\uc5b4 \uc788\ub2e4. \ud558\uc9c0\ub9cc stop\uba54\uc11c\ub4dc\ub294 \uc0ac\uc6a9\ud558\uc9c0 \ub9d0\ub77c\uace0 \ud45c\uc2dc\ub97c \ud574\ub450\uc5c8\uae30 \ub54c\ubb38\uc5d0 \uc0ac\uc6a9\uc744 \ud558\uba74 \uc548\ub41c\ub2e4.\n\ub530\ub77c\uc11c Thread\ub97c \uc8fd\uc774\uae30 \uc704\ud574\uc11c\ub294 interrupt \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uba74 \ub41c\ub2e4."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'import java.util.List;\n\npublic class ThreadUtil {\n public static void stopThreads(Thread...threads){\n if(threads == null){\n throw new RuntimeException("given threads is null");\n }\n for(Thread thread:threads){\n stopThread(thread);\n }\n }\n\n public static void stopThread(Thread thread) {\n if(thread == null){\n throw new RuntimeException("given thread is null");\n }\n thread.interrupt();\n }\n\n}\n'})})]})}function s(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>o});var t=r(96540);const a={},d=t.createContext(a);function i(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.