Sanal İş Parçacıkları Oluşturma
Thread.ofVirtual ve yürütücüler
Sanal İş Parçacıkları Oluşturma, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Sanal İş Parçacıkları Oluşturma Yolları
Java, sanal iş parçacıkları oluşturmak için çeşitli giriş noktaları sunar. En önemli ikisi Thread.ofVirtual() oluşturucusu ve Executors.newVirtualThreadPerTaskExecutor() fabrikasıdır.
Bu derste her birini inceleyeceksiniz.
Oluşturucu: start
Thread.ofVirtual() bir oluşturucu döndürür. .start(runnable) çağrısı, iş parçacığını oluşturur ve hemen başlatır.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t = Thread.ofVirtual().start(() ->
System.out.println("Started directly"));
t.join();
}
}Oluşturucu: unstarted
İş parçacığını yapılandırıp daha sonra başlatmak istediğinizde .unstarted(runnable) kullanın.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t = Thread.ofVirtual().unstarted(() ->
System.out.println("Started later"));
System.out.println("Before start, alive? " + t.isAlive());
t.start();
t.join();
}
}Yeniden Kullanılabilir Fabrika
Oluşturucu, .factory() aracılığıyla bir ThreadFactory üretebilir. newThread çağrılarının her biri yeni bir sanal iş parçacığı sağlar.
import java.util.concurrent.ThreadFactory;
public class Main {
public static void main(String[] args) throws InterruptedException {
ThreadFactory factory = Thread.ofVirtual().name("job-", 0).factory();
Thread a = factory.newThread(() ->
System.out.println(Thread.currentThread().getName()));
Thread b = factory.newThread(() ->
System.out.println(Thread.currentThread().getName()));
a.start(); b.start();
a.join(); b.join();
}
}Pratik Yöntem
Thread.startVirtualThread(runnable), adsız bir sanal iş parçacığını tek çağrıda oluşturup başlatmanın kısa yoludur.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t = Thread.startVirtualThread(() ->
System.out.println("One-liner virtual thread"));
t.join();
}
}Yürütücü Yaklaşımı
Görev odaklı kodlar için Executors.newVirtualThreadPerTaskExecutor() kullanmayı tercih edin. Bu yürütücü, gönderilen her görev için yeni bir sanal iş parçacığı oluşturur.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
exec.submit(() -> System.out.println("task one"));
exec.submit(() -> System.out.println("task two"));
}
System.out.println("All tasks submitted and completed");
}
}Kaynaklarla Deneme Neden Kullanılmalı
ExecutorService, Java 19'dan beri AutoCloseable uygular. Bu nesneyi bir kaynaklarla deneme bloğunda kapatmak, gönderilen tüm görevlerin tamamlanmasını bekler.
Bu sayede elle shutdown ve awaitTermination çağrıları yapmadan temiz ve yapılandırılmış bir kapatma elde edersiniz.
Çok Sayıda Görev Gönderme
Görev başına çalışan yürütücü, çok büyük görev sayılarını zahmetsizce yönetir. Her görev kendi sanal iş parçacığını alır.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) {
AtomicInteger sum = new AtomicInteger();
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 1; i <= 1000; i++) {
final int n = i;
exec.submit(() -> sum.addAndGet(n));
}
}
System.out.println("Sum 1..1000 = " + sum.get());
}
}Sonuçları Gelecek Nesnesiyle Toplama
submit bir Future döndürür; böylece dönüş değerlerini diğer yürütücülerde olduğu gibi toplayabilirsiniz.
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) throws Exception {
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
Future<Integer> f = exec.submit(() -> 6 * 7);
System.out.println("Result: " + f.get());
}
}
}Oluşturucu ve Yürütücü
Amacınıza göre seçim yapın:
- Tek seferlik iş parçacıkları veya özel adlandırma için Oluşturucu / startVirtualThread
- Görev koleksiyonları göndermek ve sonuçları toplamak için newVirtualThreadPerTaskExecutor
Her ikisi de her iş birimi için bir sanal iş parçacığı oluşturur; tam olarak istediğiniz şey budur.
Sanal Yürütücüyü Önbelleğe Almayın
Tek bir sanal iş parçacığı yürütücüsünü sabit bir çalışan havuzuymuş gibi yeniden kullanmayın. Yürütücünün kendisini yeniden kullanmanızda sakınca yoktur; ancak her görevin yepyeni bir iş parçacığı başlattığını unutmayın.
Önemli nokta şudur: İş parçacıkları havuzlanmaz, yalnızca görev gönderimi kolaylaştırılır.
Hızlı Kontrol
Her biri kendi sanal iş parçacığında çalışacak büyük bir görev grubunu çalıştırmanın en iyi yolunu seçin.
Özet
Artık sanal iş parçacıklarını nasıl oluşturacağınızı biliyorsunuz:
Thread.ofVirtual().start(...)ve.unstarted(...)Thread.startVirtualThread(...)tek satırlık çağrısı- Yeniden kullanılabilir bir
ThreadFactoryiçin.factory() - Kaynaklarla denemeyle birlikte
Executors.newVirtualThreadPerTaskExecutor()
Sırada: platform ve sanal iş parçacıkları arasında seçim yapmak var.
Sıkça Sorulan Sorular
“Sanal İş Parçacıkları Oluşturma” dersi ücretsiz mi?
Evet — “Sanal İş Parçacıkları Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Sanal İş Parçacıkları Oluşturma” dersinde ne öğreneceğim?
Thread.ofVirtual ve yürütücüler Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Sanal İş Parçacıkları Oluşturma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Sanal İş Parçacıkları Nedir
- Sanal İş Parçacıkları Oluşturma
- Platform ve Sanal İş Parçacıkları
- Tuzaklar: Sabitleme ve ThreadLocals