

 AWS SDK untuk Java 1.x mencapai akhir dukungan pada 31 Desember 2025. Kami menyarankan Anda bermigrasi ke [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) untuk terus menerima fitur baru, peningkatan ketersediaan, dan pembaruan keamanan.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Pemrograman Asinkron
<a name="basics-async"></a>

Anda dapat menggunakan * metode * sinkron * atau * asinkron untuk memanggil operasi pada layanan. AWS Metode sinkron memblokir eksekusi thread Anda sampai klien menerima respons dari layanan. Metode asinkron segera kembali, memberikan kontrol kembali ke thread pemanggil tanpa menunggu tanggapan.

Karena metode asinkron kembali sebelum respons tersedia, Anda memerlukan cara untuk mendapatkan respons ketika sudah siap. Ini AWS SDK untuk Java menyediakan dua cara: Ob * jek masa depan * dan metode * * panggilan balik.

## Masa Berjangka Jawa
<a name="basics-async-future"></a>

Metode asinkron dalam AWS SDK untuk Java mengembalikan [ objek ](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/Future.html) Future yang berisi hasil operasi * asinkron di masa depan. *

Panggil `Future` `isDone()` metode untuk melihat apakah layanan telah menyediakan objek respons. Ketika respons sudah siap, Anda bisa mendapatkan objek respons dengan memanggil `Future` `get()` metode. Anda dapat menggunakan mekanisme ini untuk melakukan polling secara berkala untuk hasil operasi asinkron sementara aplikasi Anda terus bekerja pada hal-hal lain.

Berikut adalah contoh operasi asinkron yang memanggil Lambda fungsi, menerima sebuah `Future` yang dapat menampung objek [ InvokeResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/model/InvokeResult.html). Ob `InvokeResult` jek diambil hanya setelah `isDone()` is`true`.

```
import com.amazonaws.services.lambda.AWSLambdaAsyncClient;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
import java.nio.ByteBuffer;
import java.util.concurrent.Future;
import java.util.concurrent.ExecutionException;

public class InvokeLambdaFunctionAsync
{
    public static void main(String[] args)
    {
        String function_name = "HelloFunction";
        String function_input = "{\"who\":\"SDK for Java\"}";

        AWSLambdaAsync lambda = AWSLambdaAsyncClientBuilder.defaultClient();
        InvokeRequest req = new InvokeRequest()
            .withFunctionName(function_name)
            .withPayload(ByteBuffer.wrap(function_input.getBytes()));

        Future<InvokeResult> future_res = lambda.invokeAsync(req);

        System.out.print("Waiting for future");
        while (future_res.isDone() == false) {
            System.out.print(".");
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e) {
                System.err.println("\nThread.sleep() was interrupted!");
                System.exit(1);
            }
        }

        try {
            InvokeResult res = future_res.get();
            if (res.getStatusCode() == 200) {
                System.out.println("\nLambda function returned:");
                ByteBuffer response_payload = res.getPayload();
                System.out.println(new String(response_payload.array()));
            }
            else {
                System.out.format("Received a non-OK response from {AWS}: %d\n",
                        res.getStatusCode());
            }
        }
        catch (InterruptedException | ExecutionException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }

        System.exit(0);
    }
}
```

## Callback Asinkron
<a name="basics-async-callback"></a>

Selain menggunakan `Future` objek Java untuk memantau status permintaan asinkron, SDK juga memungkinkan Anda untuk mengimplementasikan kelas yang menggunakan antarmuka. [ AsyncHandler ](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/handlers/AsyncHandler.html) `AsyncHandler`menyediakan dua metode yang dipanggil tergantung pada bagaimana permintaan diselesaikan: `onSuccess` dan`onError`.

Keuntungan utama dari pendekatan antarmuka panggilan balik adalah membebaskan Anda dari keharusan melakukan polling `Future` objek untuk mengetahui kapan permintaan telah selesai. Sebagai gantinya, kode Anda dapat segera memulai aktivitas berikutnya, dan mengandalkan SDK untuk memanggil handler Anda pada waktu yang tepat.

```
import com.amazonaws.services.lambda.AWSLambdaAsync;
import com.amazonaws.services.lambda.AWSLambdaAsyncClientBuilder;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
import com.amazonaws.handlers.AsyncHandler;
import java.nio.ByteBuffer;
import java.util.concurrent.Future;

public class InvokeLambdaFunctionCallback
{
    private class AsyncLambdaHandler implements AsyncHandler<InvokeRequest, InvokeResult>
    {
        public void onSuccess(InvokeRequest req, InvokeResult res) {
            System.out.println("\nLambda function returned:");
            ByteBuffer response_payload = res.getPayload();
            System.out.println(new String(response_payload.array()));
            System.exit(0);
        }

        public void onError(Exception e) {
            System.out.println(e.getMessage());
            System.exit(1);
        }
    }

    public static void main(String[] args)
    {
        String function_name = "HelloFunction";
        String function_input = "{\"who\":\"SDK for Java\"}";

        AWSLambdaAsync lambda = AWSLambdaAsyncClientBuilder.defaultClient();
        InvokeRequest req = new InvokeRequest()
            .withFunctionName(function_name)
            .withPayload(ByteBuffer.wrap(function_input.getBytes()));

        Future<InvokeResult> future_res = lambda.invokeAsync(req, new AsyncLambdaHandler());

        System.out.print("Waiting for async callback");
        while (!future_res.isDone() && !future_res.isCancelled()) {
            // perform some other tasks...
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e) {
                System.err.println("Thread.sleep() was interrupted!");
                System.exit(0);
            }
            System.out.print(".");
        }
    }
}
```

## Praktik Terbaik
<a name="basics-async-tips"></a>

### Eksekusi Panggilan Balik
<a name="callback-execution"></a>

Implementasi Anda `AsyncHandler` dijalankan di dalam kumpulan utas yang dimiliki oleh klien asinkron. Kode pendek dan cepat dieksekusi paling tepat dalam `AsyncHandler` implementasi Anda. Long-running atau memblokir kode di dalam metode handler Anda dapat menyebabkan pertentangan untuk kumpulan utas yang digunakan oleh klien asinkron, dan dapat mencegah klien mengeksekusi permintaan. Jika Anda memiliki tugas yang berjalan lama yang perlu dimulai dari panggilan balik, mintalah callback menjalankan tugasnya di thread baru atau di kumpulan utas yang dikelola oleh aplikasi Anda.

### Konfigurasi Kolam Thread
<a name="thread-pool-configuration"></a>

Klien asinkron di AWS SDK untuk Java menyediakan kumpulan thread default yang seharusnya berfungsi untuk sebagian besar aplikasi. Anda dapat menerapkan kustom [ ExecutorService ](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/ExecutorService.html) dan meneruskannya ke klien AWS SDK untuk Java asinkron untuk kontrol lebih besar atas bagaimana kumpulan utas dikelola.

Misalnya, Anda dapat menyediakan `ExecutorService` implementasi yang menggunakan kustom [ ThreadFactory ](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/ThreadFactory.html) untuk mengontrol bagaimana thread di kumpulan diberi nama, atau untuk mencatat informasi tambahan tentang penggunaan thread.

### Akses Asinkron
<a name="s3-asynchronous-access"></a>

Kel [ TransferManager ](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/TransferManager.html) as di SDK menawarkan dukungan asinkron untuk bekerja dengan. Amazon S3`TransferManager`mengelola unggahan dan unduhan asinkron, menyediakan pelaporan kemajuan terperinci tentang transfer, dan mendukung panggilan balik ke berbagai acara.