首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在runnable外部调用由runnable的线程执行的runnable实例的方法

在runnable外部调用由runnable的线程执行的runnable实例的方法
EN

Stack Overflow用户
提问于 2011-11-05 00:33:16
回答 4查看 13.2K关注 0票数 5

这个问题令人困惑,但这就是我想要做的:

代码语言:javascript
复制
public class Main
{
    MyClass instance = new MyClass();
    Thread secondThread = new Thread(instance);

    public static void main()
    {
         secondThread.start();
         //here i want to call foo(), but be processed by secondThread thread(not the Main thread)
    }
}


public class MyClass implements Runnable
{
    @Override
    public void run()
    {

    }

    public void foo()
    {
        System.out.println("foo");
    }
}

如果我使用"instance.foo();“,它将由主线程处理。

EN

回答 4

Stack Overflow用户

发布于 2011-11-05 00:43:16

Runnable的思想是,它是一段合并的代码,可以由它选择的任何上下文(在本例中为线程)中的其他东西执行。第二个线程将在启动时调用run()方法,因此您可能希望在MyClass.run()方法中调用foo()。您不能从主线程任意决定第二个线程现在要放弃它在run()方法中所做的任何事情,而开始在foo()上工作。

票数 5
EN

Stack Overflow用户

发布于 2011-11-05 00:50:26

你不能调用一个线程,你只能给它发信号。如果您希望执行foo(),则必须向run()发出信号,要求它执行foo()。

票数 3
EN

Stack Overflow用户

发布于 2011-11-05 00:56:26

如下所示更改您的代码:

代码语言:javascript
复制
public class Main
{
    Object signal = new Object();
    MyClass instance = new MyClass();
    Thread secondThread = new Thread(instance);

    public static void main()
    {
         instance.setSignal(signal);
         secondThread.start();
          synchronize(signal)
          { 
         try{
          signal.notify();**//here will notify the secondThread to invoke the foo()**
         }
         catch(InterrupedException e)
         {
                e.printStackTrace();
          }
    }
}


public class MyClass implements Runnable
{
    Object signal;
    public setSignal(Object sig)
    {
        signal = sig;
    }

    @Override
    public void run()
    {
       synchronize(signal)
       { 
         try{
          signal.wait();
         }
         catch(InterrupedException e)
         {
                e.printStackTrace();
          }
       }
        this.foo();

    }

    public void foo()
    {
        System.out.println("foo");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8012644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档