package com.app; public class Main { public static void main(String[] args) { Main main = new Main(); main.read("ololo", new AsyncTaskListener() { @Override public void onAsyncTaskComplete(String result) { System.out.println("Ответ первой таски: " + result); } }); main.read("pepepe", new AsyncTaskListener() { @Override public void onAsyncTaskComplete(String result) { System.out.println("Это ответ второй таски: " + result); } }); System.out.println("Главный поток не блокируется"); System.out.println("поэтому эти строки выведутся первыми"); System.out.println("Вот такие пироги"); } public void read(String name, AsyncTaskListener listener) { Reader reader = new Reader(name); reader.asyncTaskListener = listener; Thread thr = new Thread(reader); thr.start(); } private interface AsyncTaskListener { void onAsyncTaskComplete(String result); } private class Reader implements Runnable { private AsyncTaskListener asyncTaskListener; private String name; public Reader(String name) { this.name = name; } @Override public void run() { try { // Имитируем длительные выполнения. Thread.sleep(2000); } catch (InterruptedException ex) { } String result = "Updated result from " + name; asyncTaskListener.onAsyncTaskComplete(result); } } }