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

2dv*_*sio 11 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

先感谢您.

nic*_*ild 23

Thread不是"中"跑,而是并排侧.

所以,是的,你可以启动另一个Thread与你的另外两个并排运行Thread.事实上,任何人Thread都可以启动另一个Thread(只要操作系统允许).


use*_*300 5

是的,这应该有效,共享的Mutex应该做它的工作.出于偏执,我会做两个互斥声明,final以避免任何奇怪的"逃避"问题.例如

final Mutex sharedMutex;
Run Code Online (Sandbox Code Playgroud)

一个建议:也许这是我的风格,但对于像这样的代码我很少延伸Thread.请Runnable改为实施.IMO它有点混乱(YMMV在这里).另外,当你开始使用高级并发工具时Executor,他们会处理Runnables,而不是线程.