【问题标题】:Call the method of Java class which implements runnable after creating its thread object创建线程对象后调用实现runnable的Java类的方法
【发布时间】:2012-11-02 10:18:40
【问题描述】:

我有一个java类

SomeClass implements Runnable

其中有一个方法 display()。

当我创建这个类的线程时

Thread thread1 = new Thread(new SomeClass());

现在如何使用线程实例调用 display() 方法?

【问题讨论】:

    标签: java multithreading runnable producer-consumer


    【解决方案1】:

    您最终会在thread1 上致电start()

    SomeClass 将覆盖 run() 方法,而后者又需要调用 display() 方法。

    这样当你调用start()时,SomeClass()对象的run方法会被调用并执行display()方法。

    例子:

    public class SomeClass implements Runnable {
        private List yourArrayList;
        public void run() {
            display();
        }
    
        public void display() {
            //Your display method implementation.
        }
       public List methodToGetArrayList()
       {
        return  yourArrayList;
       }
    }
    

    更新:

    SomeClass sc = new SomeClass()
    Thread thread1 = new Thread(sc);
    thread1.join();
    sc.methodToGetArrayList();
    

    注意:示例是为了说明概念,可能存在语法错误。

    如果你不使用 join(),正如 Andrew 评论的那样,结果可能会不一致。

    【讨论】:

    • Run 方法被调用并在其中执行一个循环,但我将执行期间的所有信息存储在 SomeClass 中的 ArrayList 中,我需要获取该 ArrayList。
    • 非常感谢您的支持。我正是想要那个。
    • @wali:不客气。享受编码。如果回答对您有帮助,请不要忘记接受它。
    • 我正在等待接受。他们还需要 5 分钟来确认我不是垃圾邮件 :)...
    • 这会导致访问问题。在访问列表之前,您需要等待线程完成。最好使用异步方式并传递回调。
    【解决方案2】:

    如果你想从你的新线程调用 display 那么它需要在你的 run 方法中。

    如果你想从调用线程调用它然后创建一个新对象,将它传递给你的新线程,然后从你的下降线程调用 display

    SomeClass sc = new SomeClass();
    new Thread(sc).start();
    sc.display()
    

    【讨论】:

    • 非常感谢您的支持。我正是想要那个。
    【解决方案3】:

    简单委托:

    public class SomeClass implements Runnable {
    
        @Override
        public void run() {
            display();
        }
    
        public void display() {
            //...
        }
    
    }
    

    【讨论】:

    • Run 方法被调用并在其中执行一个循环,但我将执行期间的所有信息存储在 SomeClass 中的 ArrayList 中,我需要获取该 ArrayList。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多