【问题标题】:Running two functions with threading使用线程运行两个函数
【发布时间】:2012-02-23 17:50:45
【问题描述】:

我有一个名为 Socket 的类,它有两个函数,例如 func1 和 func2

fucn1() {
    while(true) {
        ...
    }
}

fucn2() {
    while(true) {
        ...
    }
}

我希望它们中的两个同时使用线程运行。我怎样才能做到这一点??

class socket implement Runnable {
    public void run() {
        func1();
        func2();
    }
}

在这段代码中,只有第一个函数被执行,而不是第二个。我怎样才能同时运行它们?

【问题讨论】:

  • 这两个方法都返回 void 并且不带参数吗?

标签: java multithreading


【解决方案1】:

我的建议是:

而不是制作套接字ClassRunnable, 创建两个Runnable 线程,如下面的示例所示,并从那里调用您的函数。并从您的 Socket 类启动这两个线程。

class Socket{
    private void startThreads() {
          new Thread(new Th1()).start();
          new Thread(new Th2()).start();

    }
}
class Th1 implements Runnable {
    @Override
    public void run() {
        fucn1();
    }
}
class Th2 implements Runnable {
    @Override
    public void run() {
        fucn2();
    }
}

【讨论】:

  • 请使用大写字母命名类(Th1、Th2),因为这是 Java 约定。我也不知道你为什么在调用 func1() 和 func2() 函数后等待 100 毫秒?猜猜这只是我的无知。
【解决方案2】:

您可以像这样同时运行它们:

// start a thread for func1
Thread t1 = new Thread(new Runnable() {
       public void run() { 
           func1();
       }
    });
 t1.start();

 // func2 will run in parallel on the main thread
 func2();

 t1.join(); // if you want to wait for func1 to finish.

你没有提供任何细节,所以我假设它们没有副作用。

【讨论】:

    【解决方案3】:

    如果您想同时运行这两个函数,请生成两个线程并在各自的线程中运行每个函数。

    这正是线程的用途。

    【讨论】:

    【解决方案4】:

    您需要为此场景创建两个线程。

    class socket implement runable
    {
        boolean condition;
    
        public socket(boolean condition){
             this.condition = condition;
        }
        public void run()
       {
          if(condition == true){
                func1();
          }else{
               func2();        
          }
       }
    }
    
    Thread t1 = new Thread(new Socket(true));
    Thread t1 = new Thread(new Socket(false));
    
    
      t1.start();
        t2.start();
    

    除此之外,您还需要在每个方法中让出控制权,以确保每个线程都有公平的运行机会。

    【讨论】:

      猜你喜欢
      • 2015-03-22
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      相关资源
      最近更新 更多