我可以在java中的线程中运行一个线程吗?

时间:2012-06-19 19:14:06

标签: java multithreading

在Java中,我有必要实现一个扩展Thread的类 在另一个类似的课程。这可能吗?

我想要做的一个例子是以下(简化)片段:

// The first layer is a Thread
public class Consumer extends Thread {

    // Variables initialized correctly in the Creator
    private BufferManager BProducer = null;

    static class Mutex extends Object {}
    static private Mutex sharedMutex = null;


    public Consumer() {
        // Initialization of the thread
        sharedMutex = new Mutex();

        BProducer = new BProducer(sharedMutex);
        BProducer.start();
    }


    public void run() {

        int data = BProducer.getData();

        ///// .... other operations
    }


    ////// ...... some code

    // Also the second layer is a Thread
    private class BufferManager extends Thread {

        Mutex sharedMutex;
        int data;

        public BufferManager(Mutex sM) {
            sharedMutex = sM;
        }

        public int getData(Mutex sM) {
            int tempdata;
            synchronized(sharedMutex) {
                tempdata = data;
            }
            return tempdata;
        }

        public void run() {
            synchronized(sharedMutex) {
                data = getDataFromSource();
            }
            ///// .... other operations on the data
        }
    }
}

第二个Thread直接在第一个Thread中实现。 此外,我想知道实现这样的Mutex是否有效。 如果没有,有没有更好的(标准)方法呢?

提前谢谢。

2 个答案:

答案 0 :(得分:22)

Thread未在'内运行,而是并排运行。

是的,您可以启动另一个Thread与其他两个Thread并排运行。事实上,任何Thread都可以启动另一个Thread(只要操作系统允许)。

答案 1 :(得分:5)

是的,这应该有效,共享的Mutex应该做到这一点。出于偏执,我会制作互斥声明final以避免任何奇怪的“逃避”问题。 e.g。

final Mutex sharedMutex;

一个建议:也许这是我的风格,但对于这样的代码,我很少延伸Thread。只需实施Runnable即可。 IMO它有点混乱(YMMV在这里)。此外,当您开始使用Executor等高级并发实用程序时,它们会处理Runnables,而不是线程。