Java - 是否可以找到带有名称的线程并将其强制转换为类?

时间:2013-10-15 05:58:37

标签: java multithreading

我对java有一些问题。

例如,

    public class Test implements Runnable{
        Thread thread;

        public Test() throws Exception{
            thread = new Thread(this);
            thread.setName(getClass().getName() + thread.getId());
            thread.start();
        }

        public void run() {
            System.out.println("start");
            try {
                while(!thread.isInterrupted())
                    Thread.sleep(Long.MAX_VALUE);
            }
            catch(InterruptedException ie) {
                System.out.println("interrupted");
            }

            System.out.println("stop");
        }

        public void stop() {
            thread.interrupt();
        }
}

此代码现在是无限睡眠状态。 然后,我在另一个Java代码中找到这个线程(类似这样的方式 - http://www.ehow.com/how_7467934_java-thread-runtime.html

我将“找到的线程”转换为Test class

  

测试测试=(测试)发现线程;

最后,

  

test.stop();

工作!

我想在其他应用程序中找到并停止此线程(绝对不相同)

我不熟悉Java,这也就像我所知道的那样,代码方式在C ++或其他方面不起作用。

我的代码是否合理?没问题?我担心......

请告诉我。非常感谢。

(我不擅长英语。对不起)

1 个答案:

答案 0 :(得分:-1)

您的代码没有问题!一切都很完美。您可以省略在休眠循环中检查线程的中断状态,因为一旦线程被中断,它将在尝试休眠或等待时抛出该异常。

public class Test implements Runnable {
    Thread thread;

    public Test() throws Exception {
        thread = new Thread(this);
        thread.setName(getClass().getName() + thread.getId());
        thread.start();
    }

    public void run() {
        System.out.println("start");
        try {
            while (true) {
                Thread.sleep(Long.MAX_VALUE);
            }
        } catch (InterruptedException ie) {
            System.out.println("interrupted");
        }

        System.out.println("stop");
    }

    public void stop() {
        thread.interrupt();
    }

    public static void main(String [] args) throws Exception{
        Test t = new Test();
        t.stop();
    }
}