在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是否有效。 如果没有,有没有更好的(标准)方法呢?
提前谢谢。
答案 0 :(得分:22)
Thread
未在'内运行,而是并排运行。
是的,您可以启动另一个Thread
与其他两个Thread
并排运行。事实上,任何Thread
都可以启动另一个Thread
(只要操作系统允许)。
答案 1 :(得分:5)
是的,这应该有效,共享的Mutex应该做到这一点。出于偏执,我会制作互斥声明final
以避免任何奇怪的“逃避”问题。 e.g。
final Mutex sharedMutex;
一个建议:也许这是我的风格,但对于这样的代码,我很少延伸Thread
。只需实施Runnable
即可。 IMO它有点混乱(YMMV在这里)。此外,当您开始使用Executor
等高级并发实用程序时,它们会处理Runnables
,而不是线程。