2

我在涉及线程的 Uni 作业中需要帮助。在作业中,我必须实现一个包含 4 个线程的程序,其中一个线程包含另一个线程。我在下面制作了一个图表以帮助更好地解释它:

在此处输入图像描述

最好/有效的方法是什么?我的教授对线程的解释非常有限,从我目前在网上收集的信息来看,我必须实现 Runnable 接口,并从主程序的 run() 方法中创建 4 个类,这可能会结束搞得一团糟,因为我还没有完全掌握 Java 中线程的概念。如果有人可以建议我可以了解更多信息的资源,请在此处发布。

到目前为止,这是我理解的一个例子:

public class MainThread implements Runnable
{
/**
 * The run method from the Runnable interface that
 * executes the entire program.
 */
public void run()
{
    class Controller implements Runnable
    {
        public void run() 
        {
            class MiniWalker implements Runnable
            {
                public void run ()
                {
                }
            }
        }

    }

    class ObjectWalker implements Runnable
    {
        public void run ()
        {   
        }
    }

    class GroupWalker implements Runnable
    {
        public void run ()
        {               
        }
    }

    class YearWalker implements Runnable
    {
        public void run ()
        {           
        }
    }
}

/**
 * The heart and core of this assignment.
 */ 
public static void main(String[] args) 
{
    (new Thread(new MainThread ())).start();
}

}
4

4 回答 4

3

线程不包含其他线程。线程可以控制其他线程,但这完全不同。您的控制图不必直接与您的类层次结构相关。

于 2012-07-11T17:34:40.347 回答
1

我建议您阅读 Brian Goetz 的“Java Concurrency In Practice”并深入研究 java.util 下的并发类(例如 Executor)。他们会让你的生活比原始线程更好。

于 2012-07-11T17:33:36.240 回答
0

开始的好地方是http://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html。它将使您对Java中的并发有基本的了解。如果不描述该线程的作用(为什么需要创建它们),就很难写出哪个选择是最佳的。

值得一提的是,您可以在不显式编码新类的情况下生成线程。

public static void main(String[] args) {
    new Thread(new Runnable() {
        @Override
        public void run() {

        }
    }).start();
}
于 2012-07-11T17:36:07.490 回答
0

Doug Lee 的Concurrent Programming是另一个很好的资源(几乎所有这些资源在谷歌书籍上都是免费的)。ExecutorServiceForkJoinPool也值得一看。另外,通读javadocs,它们也很不错。

可能值得尝试将您的应用程序分解为本质上是任务的内容,然后将它们放入线程池中。

于 2012-07-19T17:15:18.933 回答