【问题标题】:Executing the code in the Asynchronous way以异步方式执行代码
【发布时间】:2020-08-26 05:00:51
【问题描述】:

我从事一个小型测试项目,以检查异步编程在 Java 中的实际工作方式。

我试图在控制台上显示结果,但在控制台上什么也没显示。也许主线程将立即执行并关闭。你能给我一个更好的方法来在控制台上显示消息吗?

Task5 类

class Task5
{
    public String task1()
    {
        return "Hello Benz";
    }
    public String task2(String msg)
    {
        return msg+" How are you?";
    }
    public String task3(String msg)
    {
        return msg+" Not Bad, How are you Jhon?";
    }
}

Task4 类

class Task4 implements Runnable
{
    private String msg;

    public Task4(String msg)
    {
         this.msg=msg;
         Thread th1=new Thread(this);
         th1.start();
    }

    @Override
    public void run() {
          consumer.accept(msg);
    }

    Consumer<String> consumer=new Consumer<String>() {
        @Override
        public void accept(String s) {
            System.out.println(s);
        }
    };

}

AsyncProgram 类

public class AsyncProgram2 {

    public void start()
    {

     for(int i=1;i<=1000;i++) {
         CompletableFuture.supplyAsync(() -> new Task5().task1())
                 .thenApply(name -> new Task5().task2(name))
                 .thenApply(res1 -> new Task5().task3(res1))
                 .thenAccept(res3 -> new Task4(res3));
      }
    }
}

也很高兴知道:由于我对所有这些反应性的东西都是新手,是否可以更好地在不阻塞的情况下编写代码?

【问题讨论】:

  • 它应该工作你如何开始这个?
  • 通过main方法
  • 所以我复制粘贴了你的代码,它可以工作。它按预期显示消息。

标签: java asynchronous reactive-programming


【解决方案1】:

感谢@Emiter 抽出宝贵时间。但这对我不起作用。无论如何,我已经通过使用newCachedThreadPool() 方法或newFixedThreadPool(nThreads) 方法创建一个单独的线程池得到了解决方案。

代码在我自己的线程池中运行,没有使用默认的 ForkJoinPool 并且可以正常工作。

public void start()
    {

        ExecutorService myThreadPool= Executors.newCachedThreadPool();

         CompletableFuture.supplyAsync(() -> new Task5().task1(),myThreadPool)
                 .thenApplyAsync(name -> new Task5().task2(name),myThreadPool)
                 .thenApplyAsync(res1 -> new Task5().task3(res1),myThreadPool)
                 .thenAcceptAsync(res2->new Task4(res2),myThreadPool);

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2013-09-29
    • 2011-08-22
    • 1970-01-01
    • 2017-04-25
    • 2018-01-25
    相关资源
    最近更新 更多