Coolluck
114
2019-06-12 16:11:35 작성 2019-06-12 16:19:09 수정됨
1
92

현재 스레드에서 다른 스레드 종료하는 방


메인 A클래스에서 스레드 풀로 2개의 스레드를 생성 후 10 초 후에 B클래스에서 C클래스Thead2와 자기자신 스레드인 Thead1을 Thread.sleep() 와 Thread.interrupt()를 이용해서 종료시킬려고합니다.


근데 Thead1은 쉽게 하겠는데 C클래스의 경우 Thread2 객체로 받아와서 종료시켜야될거같은데 
어떻게 해야할지 모르겠습니다. 혹시 나 알려주시면 감사드리겠습니다.


public class A {

    private static ExecutorService threadPool = Executors.newFixedThreadPool(2);



    public void serverSetting() {

        Runnable Thead1 = new B();

        Runnable Thead2 = new C();

        threadPool.execute(Thead1);

        threadPool.execute(Thead2);

    }

class B  implements Runnable {


  public void run(){

    10초 후 Thead2종료 후에 바로 Thead1 종료

  }

}

class C  implements Runnable {


  public void run(){

    ~작업중~

  }

}

0
0
  • 답변 1

  • Frudy
    2k
    2019-06-12 17:10:16

    어...네이밍 때문에 혼동스럽습니다만...일단 답변드리겠습니다.

    쓰레드1, 쓰레드2를 서로 종료한다 안한다 라고 말씀주셨으나,

    위에 선언된 Thread1, Thread2는 Runnable입니다. 쓰레드가아니고 작업객체입니다.


    어........그래서

    쓰레드1, 쓰레드2를 종료한다 --> 작업1, 작업2를 종료한다 라고 해석하셔야되고...


    작업2가 종료되면 작업1이 곧바로 종료되야한다고 생각해보니...좀 이상합니다.

    이건 쓰레드2가 종료되면 쓰레드1이 종료된다가 아니기때문에,

    inturrept()로 종료를 시킬 수 없습니다.


    아무튼 구현을 하려면,


    B클래스와 C클래스에 private boolean isStop필드를 주시고

    B클래스와 C클래스에 서로를 참조할수있는 필드를 주시는방법이 있겠...네요.


    B

    {

    private C c;

    private boolean isStop;

    }

    이런식으루요.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.