Hala Java'da yeni başlayan biriyim, bu yüzden iş parçacıkları ve eşzamanlılık hakkında çok şey öğrenmedim. Ancak, java.util.Timer ve TimerTask ile yaşadığım sorunlar nedeniyle ScheduledThreadPoolExecutor'ı bir zamanlayıcı olarak kullanmak istiyorum. Konuların oluşturulmasıyla son derece ilgileniyorum ve birkaç hafta içinde onları öğreneceğimi biliyorum. Ancak, mümkünse, birisi benim mevcut mini sınama programımı kullanarak util.timer kullanarak ScheduledThreadPoolExecutor kullanarak nasıl basit bir örnek verebilir?10 ScheduledThreadPoolExecutor'a dönüştürme
Bu örnekte ASAP'yi tamamlamak istiyorum. Bu yüzden, iş parçacıkları hakkında bilgi edinmek için fazla zamanım yok - ne kadar istesem de. Bunu söyledikten sonra, bir java acemisinin ScheduledThreadPoolExecutor ile ilgili bilmesi gereken önemli olduğunu düşündüğünüz her şeyi dahil edin.
Ben daha büyük bir programda yaşıyorum sorunu temsil edecek bir hızlı küçük bir örnek yaptık
Örnek programı. Bu programın yapması gereken, kullanıcının bir sayaç başlatmak için bir düğmeye basmasına izin vermektir. Kullanıcı daha sonra istediği zaman sayacı durdurabilir ve yeniden başlatabilir. Daha büyük programda bu sayacın eşit kalması hayati önem taşır, bu yüzden scheduleAtFixRate() yöntemini kullanmıştım. Başlangıç gecikmesinin her zaman aynı olması önemlidir (bu durumda 0). Sorun (göreceğinizden eminim), zamanlayıcı iptal edildikten sonra yeniden başlatılamaz - ScheduledThreadPoolExecutor'ın çözeceğini umduğum bir şey.
kodu: (Ben bütün kaldırmasıyla düşünüyorum) fazladan kod olabilir böylece
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.TimerTask;
import java.util.Timer;
public class Tester extends JFrame {
JButton push = new JButton("Push");
static JTextArea textOut = new JTextArea();
Timer timer = new Timer();
boolean pushed = false;
static int i = 1;
public Tester() {
super();
add(push, BorderLayout.NORTH);
add(textOut);
push.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!pushed) {
timer.scheduleAtFixedRate(new Task(), 0, 1000);
pushed = true;
} else {
timer.cancel();
pushed = false;
}
}
});
}
static class Task extends TimerTask {
public void run() {
textOut.setText("" + i++);
}
}
public static void main(String[] args) {
Tester a = new Tester();
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.pack();
a.setVisible(true);
}
}
ben test için bu sınıf çok kullanırlar.
Hissettiğim görevi gerçekleştirmek için Salıncak GUI Konuya bir görev eklemek zorunda Bu örnekte ASAP'yi tamamlamak istiyorum. Bu yüzden ne kadar istesem de, iş parçacıkları hakkında bilgi edinmek için fazla zamanım yok. ” –
Genellikle bir öğrenme örneği, "bu çok önemlidir" ve benzer şekilde ifade içermez. – SJuan76
Umarım kimse bunu düşünmez. Programlama konusunda tutkuluyum ve üniversitede okuyorum.İnsanları programımı kodlamak istemiş olsaydım, gerçek kodu örnekte yerine koyduğum bir Hızlı Test örneğinin yerine koyardım. –