아래 코드ì—� ë¬¸ì œê°€ 있는것 같아요. 분명 ë‘�ê°œì�˜ 메소드가 같아보ì�´ëŠ”ë�° (주ì„�처리ë�œ run() 메소드와 run() 메소드) 한개만 ë�˜ê³ 나머지 한개는 ì—�러가 납니다(unreachable statement) - ìž„ì�¸íƒ�
waitfortarget() 콜하기 ì „ì—� 중괄호가 ë‘�ê°œ ìžˆê³ í•˜ë‚˜ 있는 ì°¨ì�´ì�¸ê²ƒ ê°™ì�€ë””?? ì�Œ.. 지금 주ì„�처리 안한 runì—�서 ì—�러가 나는거야?
만약 그러면.. 무한루프때메.. wait..어쩌구 함수ì—� ë�„달 못해서.. 'ë�„ë‹¬í• ìˆ˜ì—†ëŠ” 문장' ì�´ë�¼ëŠ” ì—�러가 나는것ì�´ ì•„ë‹�까..??? (._.);
주�처리한것�서 나면.. �.. 잘 모르겄넹.. ㅋㅋ;
-해성
만약 그러면.. 무한루프때메.. wait..어쩌구 함수ì—� ë�„달 못해서.. 'ë�„ë‹¬í• ìˆ˜ì—†ëŠ” 문장' ì�´ë�¼ëŠ” ì—�러가 나는것ì�´ ì•„ë‹�까..??? (._.);
주�처리한것�서 나면.. �.. 잘 모르겄넹.. ㅋㅋ;
-해성
소스코드 ¶
~cpp
import java.util.*;
public class ReThread implements Runnable {
protected Runnable target;
private static Vector threads = new Vector();
private ReThread reThread;
private Thread thread;
private static int id=0;
private static synchronized int getID() { return id++;}
public ReThread(Runnable target) {
this.target = target;
}
public synchronized void start() {
if((thread==null) && (reThread==null)) {
synchronized(threads) {
if(threads.isEmpty()) {
thread = new Thread(this, "ReThread-" + getID());
thread.start();
}
else {
reThread = (ReThread)threads.lastElement();
threads.setSize(threads.size()-1);
reThread.start0(this);
}
}
}
}
protected synchronized void start0(ReThread reThread) {
this.reThread = reThread;
target = reThread.target;
notify();
}
public synchronized void interrupt () {
if ((target != null) && ((thread != null) ^ (reThread != null))) {
if (thread != null) {
thread.interrupt ();
} else {
reThread.interrupt0 (this);
}
}
}
protected synchronized void interrupt0(ReThread reThread) {
if((target!=null) && ((reThread==this.reThread))) {
thread.interrupt();
}
}
public void run() {
while(true) {
try {
target.run();
} catch(RuntimeException ex) {
ex.printStackTrace();
}
}
waitForTarget();
}
/*public void run () {
while (true) {
try {
target.run ();
} catch (RuntimeException ex) {
ex.printStackTrace ();
}
waitForTarget ();
}
}*/
protected synchronized void waitForTarget() {
target=null;
threads.addElement(this);
while(target==null) {
try {
wait();
} catch(InterruptedException ignored) { }
}
}
}










