Bài 9: Tiếp tục cải tiến chương trình<br />
đồ họa liệt kê các số nguyên tố<br />
Lê Hồng Phương,<br />
Nguyễn Việt Hùng, Hà Mỹ Linh<br />
phuonglh@gmail.com<br />
Khoa Toán-Cơ-Tin học<br />
Trường Đại học Khoa học Tự nhiên Hà Nội<br />
<br />
Nội dung<br />
●<br />
<br />
Tiếp tục cải tiến chương trình liệt kê các số nguyên<br />
tố trong bài giảng trước:<br />
–<br />
<br />
Lập trình đa luồng trong ứng dụng đồ họa:<br />
●<br />
●<br />
<br />
Luồng đồ họa<br />
Luồng công việc<br />
<br />
–<br />
<br />
Sử dụng ProgressMonitor<br />
<br />
–<br />
<br />
Sử dụng SwingWorker<br />
<br />
–<br />
<br />
Sử dụng PropertyChangeListener<br />
<br />
2012-2013<br />
<br />
Object-Oriented Programming: Collections<br />
<br />
2<br />
<br />
Nguyên tắc tách luồng<br />
●<br />
<br />
Khi lập trình các ứng dụng có giao diện đồ họa, ta<br />
cần chú ý nguyên tắc tách luồng:<br />
–<br />
<br />
–<br />
<br />
●<br />
<br />
Luồng đồ họa: vẽ, cập nhật các thành phần đồ<br />
họa, nhận các sự kiện bấm phím, kích chuột...<br />
Luồng công việc: sử dụng để chạy các tác vụ<br />
cần nhiều thời gian để thực hiện.<br />
<br />
Chú ý: luồng đồ họa còn được gọi là luồng phân phối<br />
sự kiện: Event Dispatch Thread – EDT. Mọi ứng<br />
dụng đồ họa đều chạy trong một luồng đồ họa.<br />
<br />
2012-2013<br />
<br />
Object-Oriented Programming: Collections<br />
<br />
3<br />
<br />
Nguyên tắc tách luồng<br />
●<br />
<br />
●<br />
<br />
●<br />
<br />
Trong chương trình liệt kê số nguyên tố ở bài giảng<br />
trước, ta không tách luồng.<br />
Nếu người dùng nhập vào số n lớn cỡ hàng trăm triệu thì<br />
tác vụ liệt kê số nguyên tố sẽ mất nhiều thời gian.<br />
Trong thời gian chờ tính toán, giao diện đồ họa của<br />
chương trình không hoạt động:<br />
–<br />
<br />
Người dùng không thể chọn thực đơn hay thực hiện<br />
bất kì công việc nào khác trên giao diện.<br />
<br />
–<br />
<br />
Lí do: luồng đồ họa đang bận tính toán!<br />
<br />
2012-2013<br />
<br />
Object-Oriented Programming: Collections<br />
<br />
4<br />
<br />
Nguyên tắc tách luồng<br />
●<br />
<br />
Ta cần cải tiến chương trình với cách giải quyết cơ bản:<br />
–<br />
<br />
–<br />
<br />
●<br />
<br />
Viết một luồng công việc có nhiệm vụ liệt kê các số<br />
nguyên tố, chạy tách riêng khỏi luồng đồ họa.<br />
Khi nào luồng công việc thực hiện xong nhiệm vụ, trả<br />
về kết quả thì sẽ thực hiện cập nhật kết quả trên giao<br />
diện bằng luồng đồ họa.<br />
<br />
Trong thực tế, không nhất thiết phải chờ luồng công việc<br />
chạy xong, có kết quả toàn bộ mới thực hiện cập nhật đồ<br />
họa.<br />
–<br />
<br />
2012-2013<br />
<br />
Cập nhật dần dần giao diện, sử dụng kết quả trung<br />
gian → Tăng tính tương tác của chương trình.<br />
Object-Oriented Programming: Collections<br />
<br />
5<br />
<br />