关于同时执行多方法的操作,我有疑惑

大佬们,我一个类中有两个方法a和b,a有返回值,b没有返回值。我要如何做才能够在调用a方法的期间同时执行b方法,前提是b的执行速度不能够影响到a方法的执行速度,他们两者毫无相关。

我做这个的场景是想在做一个操作1的过程中,提前将另外一个操作2放入缓存中,待操作1完成,就可以立即从操作2缓存中拿去数据,提高速度。

请问这样需要用到什么技术,多线程的并行?还是有其他的。(因为现在只是构思阶段,没有代码给到大佬看,请见谅!)

基本的多线程 + 同步,就可以完成。

给你写了一个,demo。不知道是不是你要的。使用CompletableFuture实现。

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

public class Main {
	public static void main(String[] args) throws Exception {
		
		// 异步执行方法1,和方法2。一共耗时2秒,返回方法1的运行结果。
		System.out.println("最终结果:" + func());
	}

	public static String func() throws Exception {
		
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");

		CompletableFuture<String> f1 = CompletableFuture.supplyAsync(() -> {
			System.out.println("func1执行:" + LocalTime.now().format(formatter));
			String ret = func1();
			System.out.println("func1结束:" + LocalTime.now().format(formatter));
			return ret;
		});

		CompletableFuture<Void> f2 = CompletableFuture.runAsync(() -> {
			System.out.println("func2执行:" + LocalTime.now().format(formatter));
			func2();
			System.out.println("func2结束:" + LocalTime.now().format(formatter));
		});

		// 异步执行2个方法
		CompletableFuture.allOf(f1, f2)
			// 阻塞,直到所有方法都执行完毕
			.get();

		// 返回方法1的执行结果
		return f1.get();
	}

	// 方法1,耗时1秒
	public static String func1() {
		try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return "success";
	}

	// 方法2,耗时2秒
	public static void func2() {
		try {
			TimeUnit.SECONDS.sleep(2);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

这一段是不是意味着只有等两个方法都执行完了,f1才能有返回值?举个例子:func1执行需要10秒,func2执行需要20秒,也就是说需要等到20秒后func1才能返回success?
有没有办法就是在10秒后func1就直接返回success。func2继续执行,等到20秒后func2也执行完毕!

那你根本就不用管func2。func1先执行,func2后异步执行。func1执行完毕直接返回就是了。