

 AWS SDK untuk Java 1.x mencapai end-of-support 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 hingga klien menerima respons dari layanan. Metode asinkron segera kembali, memberikan kontrol kembali ke utas panggilan tanpa menunggu respons.

Karena metode asinkron kembali sebelum respons tersedia, Anda memerlukan cara untuk mendapatkan respons saat sudah siap. AWS SDK untuk Java Ini menyediakan dua cara: *objek masa depan* dan *metode callback*.

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

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

Panggil `Future` `isDone()` metode untuk melihat apakah layanan telah menyediakan objek respons. Ketika respon sudah siap, Anda bisa mendapatkan objek respon 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 `Future` yang dapat menampung objek. [InvokeResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/model/InvokeResult.html) `InvokeResult`Objek diambil hanya setelah `isDone()` itu`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 selesai: `onSuccess` dan`onError`.

Keuntungan utama dari pendekatan antarmuka callback 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 Callback
<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 di dalam `AsyncHandler` implementasi Anda. Kode yang berjalan lama atau memblokir 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 callback, minta callback menjalankan tugasnya di thread baru atau di kumpulan utas yang dikelola oleh aplikasi Anda.

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

Klien asinkron di AWS SDK untuk Java menyediakan kumpulan utas 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 memberikan `ExecutorService` implementasi yang menggunakan kustom [ThreadFactory](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/ThreadFactory.html)untuk mengontrol cara nama thread di pool, atau untuk mencatat informasi tambahan tentang penggunaan thread.

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

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