Rumah  >  Artikel  >  Java  >  Java async

Java async

WBOY
WBOYasal
2024-08-30 15:09:53826semak imbas

Dalam bahasa pengaturcaraan Java, async ditakrifkan sebagai panggilan atau fungsi yang boleh ditakrifkan dalam fungsi lain atau diluluskan sebagai argumen dalam fungsi lain yang biasanya diisytiharkan apabila program perlu dilaksanakan tanpa menyekat program, dan ini adalah dilakukan apabila panggilan kembali daripada acara dan ia kembali ke fungsi panggil balik. Dalam java, ini ditakrifkan sebagai kaedah panggil balik yang digunakan di dalam benang yang baru dibuat. Jadi, secara amnya, pengaturcaraan async yang tidak lain hanyalah menulis kod bukan menyekat yang merupakan atur cara yang dijalankan pada utas berasingan dengan memberitahu utas utama tentang kemajuan prestasi penyiapan pelaksanaan atau kegagalan utas.

Menggunakan async dalam java

Dalam artikel ini, kita akan membincangkan kaedah panggil balik yang dikenali sebagai fungsi async dalam java. Fungsi ini juga dikenali sebagai await dalam java. Dalam java, untuk membuat atau menulis pengaturcaraan tak segerak dengan memulakan utas baharu dengan menjadikannya tak segerak sendiri. Panggilan balik tak segerak digunakan hanya apabila tugasan tidak bergantung antara satu sama lain, yang mungkin mengambil sedikit masa untuk dilaksanakan. Jadi, secara umum, panggilan async boleh dijelaskan dengan mengambil contoh membeli-belah dalam talian di mana apabila kita memilih beberapa item dan menambahnya ke dalam troli, maka item itu tidak akan disekat kerana ia juga akan tersedia kepada orang lain juga di mana orang lain tidak Tidak perlu menunggu pesanan item selesai. Jadi, apabila kita ingin menjalankan sebarang program yang boleh dilaksanakan tanpa menyekat pelaksanaannya, ia dilakukan menggunakan pengaturcaraan async.

IKLAN Kursus Popular dalam kategori ini JAVA MASTERY - Pengkhususan | 78 Siri Kursus | 15 Ujian Olok-olok

Mulakan Kursus Pembangunan Perisian Percuma Anda

Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain

Dalam Java, terdapat banyak ciri untuk menulis kod tidak menyekat, seperti menggunakan benang, niaga hadapan, aliran, dll., kerana terdapat banyak permintaan untuk kod tidak menyekat di mana pengaturcaraan async diperlukan untuk melaksanakan kod secara tidak segerak . Jadi mari kita bincangkan beberapa cara bagaimana untuk mencapai pengaturcaraan tak segerak seperti aspek jcabi, cactoos, jambu batu, completeableFutures, FutureTask, EA Async, dll.

1. completeableFutures

The completeableFutures ialah versi java bagi janji javascript yang dikenali sebagai completeableFutures yang boleh melaksanakan dua antara muka seperti Future dan CompletionStage, di mana gabungan kedua-dua antara muka ini melengkapkan ciri ini untuk menulis atau bekerja dengan pengaturcaraan async. Ciri ini menyediakan banyak kaedah seperti supplyAsync, runAsync, dsb. Kaedah ini digunakan untuk memulakan bahagian asynchronous kod kerana kaedah supplyAsync digunakan apabila kita melakukan sesuatu dengan hasilnya, dan jika kita tidak mahu apa-apa, kita boleh menggunakan kaedah runAsync. Terdapat kaedah lain yang berbeza dalam completeableFutures seperti thenCompose jika kita ingin menggunakan berbilang completeableFutures satu demi satu atau secara ringkas apabila kita ingin menggunakan nested completeableFutures dan jika kita ingin menggabungkan hasil dua completeableFutures, maka terdapat kaedah yang dinamakan kaedah thenCombine. Jadi semua kaedah ini dikendalikan dalam masa hadapan yang lengkap, yang seterusnya mempunyai kaedah peringkat penyelesaian yang memegang semua kaedah ini.

Contoh contoh: Untuk mencipta completeableFuture menggunakan pembina no-arg dengan sintaks berikut:

CompleteableFuture <String> completeableFuture = new CompleteableFuture <String>();

Jadi untuk mendapatkan hasilnya, kita perlu menggunakan kaedah get(). Jadi kita boleh menulisnya sebagai

Hasil rentetan = completeableFuture.get()  di mana kaedah get () ini akan menyekat sehingga Masa Hadapan selesai, tetapi panggilan ini akan menyekatnya selama-lamanya kerana Masa Depan tidak pernah selesai. Jadi kita perlu melengkapkannya secara manual dengan memanggil kaedah di bawah.

completeableFuture.complete("Result")

Oleh itu pelanggan mendapat keputusan yang ditentukan tanpa menghiraukan panggilan berikutnya. Program ini mungkin kelihatan seperti di bawah.

CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number));
while (!completableFuture.isDone()) {
System.out.println("CompletableFuture is not finished yet...");
}
long result = completableFuture.get();

2. EA Async

Ini adalah satu lagi ciri dalam java untuk menulis kod tak segerak secara berurutan, yang secara semula jadi menyediakan pengaturcaraan dan skala yang mudah. Ini ialah Electronic Arts yang mendapat ciri async-wait yang diberikan kepada ekosistem java melalui perpustakaan ea-async ini. Ciri ini menukar kod masa jalan dan menulis semula kaedah panggilan untuk menunggu, yang berfungsi sama seperti completableFuture. Jadi kita boleh melaksanakan kod completeableFuture di atas dengan menggunakan kaedah penyegerakan EA yang dikenali sebagai kaedah await dengan membuat panggilan ke kaedah Async.init untuk memulakan masa jalan Async.

Jadi mari kita pertimbangkan contoh pemfaktoran nombor menggunakan penyegerakan completeableFuture dan EA.

CompletableFuture <Double> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number));
while (!completableFuture.isDone()) {
System.out.println("The completeableFuture is not completed...");
}
double res = completableFuture.get();

Jadi kod di atas boleh digunakan dalam ciri penyegerakan EA menggunakan kaedah tunggu untuk kod di atas; daripada kaedah get(), kami menggunakan kaedah await() supaya kod di atas boleh dikemas kini hanya dengan baris terakhir dan kami perlu memulakan dengan kaedah init Async dalam blok statik, kod selebihnya kekal sama.

static { Async.init(); }
public func_name(){….. same as above code of completeableFuture…
double res Async.await(completableFuture);

From the above sample code, which is transformed code of completeableFuture code by using static block also for initializing the Async runtime so that the Async can transform the code of completeableFuture code during runtime and then to the await method, it can rewrite the calls which will now EA async will behave similarly to that of using the chain of completeableFuture or Future.join method. So now, when once the asynchronous execution of any method is completed, then the result from the Future method is passed to another method where the method is having the last execution using the CompleteableFuture.runAsync method.

In Java, as discussed above, there are many different ways for writing the asynchronous programming using various other methods.

Conclusion

In this article, we discussed java async where it is defined as a callback method that will continue the execution of the program without blocking by returning the calls to the callback function. This article saw how asynchronous programming is written in java using different features such as CompleteableFutures, EA async, Future Task, Guava, etc. In this article, we have seen two among these features for making the callback functions asynchronous by using various methods provided by the given respective features.

Atas ialah kandungan terperinci Java async. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Java List IteratorArtikel seterusnya:Java List Iterator