Viết chương trình tạo 2 tuyến: một tuyến tìm kiếm các số nguyên tố từ 1000 đến 1000000 và một tuyến tính tổng giá trị của các số nguyên tố tìm được. Chú ý đồng bộ tuyến. Có ai bít thì chỉ giúp, mình code hoài mà ko ra
Announcement
Collapse
No announcement yet.
multithread java
Collapse
X
-
Originally posted by 09520682 View PostViết chương trình tạo 2 tuyến: một tuyến tìm kiếm các số nguyên tố từ 1000 đến 1000000 và một tuyến tính tổng giá trị của các số nguyên tố tìm được. Chú ý đồng bộ tuyến. Có ai bít thì chỉ giúp, mình code hoài mà ko raAmat Victoria Curam.
------
Ping me at me@toan.mobi
-
sử dụng 2 thread, 1 thread dùng để tìm số nguyên tố (chạy trong hàm main cũng đc), 1 thread dùng để tính tổng và in kết quả ra màn hình sau mỗi lần tìm được 1 số nguyên tố (in số nguyên tố và kết quả tính được đến thời điểm số nguyên tố đó được tìm thấy)
đồng bộ hóa thì có trong slide của thầy rồi, chú ý là trong slide thì người ta sử dụng lệnh wait() để chờ việc đọc/ghi buffer... nhưng nếu ta sử dụng lại thì sẽ dẫn đến việc chờ có thể rất lâu => hiệu suất không đảm bảo... nên ta nên set thời gian chờ cho lệnh wait là khoảng 5ms.
Còn hơn nhau là code xác định số nguyên tố của mỗi người! bài này thầy không yêu cầu quá cao về thuật toán nên chỉ cần chạy nhanh và ổn định là được!University of Information Technology - Faculty of Computer Engineering
[ E ] 09520401@gm.uit.edu.vn || dangdx.es@gmail.com
[ F ] https://www.fb.com/dangdao261
:happy:
Comment
-
Originally posted by 09520401 View Postsử dụng 2 thread, 1 thread dùng để tìm số nguyên tố (chạy trong hàm main cũng đc), 1 thread dùng để tính tổng và in kết quả ra màn hình sau mỗi lần tìm được 1 số nguyên tố (in số nguyên tố và kết quả tính được đến thời điểm số nguyên tố đó được tìm thấy)
đồng bộ hóa thì có trong slide của thầy rồi, chú ý là trong slide thì người ta sử dụng lệnh wait() để chờ việc đọc/ghi buffer... nhưng nếu ta sử dụng lại thì sẽ dẫn đến việc chờ có thể rất lâu => hiệu suất không đảm bảo... nên ta nên set thời gian chờ cho lệnh wait là khoảng 5ms.
Còn hơn nhau là code xác định số nguyên tố của mỗi người! bài này thầy không yêu cầu quá cao về thuật toán nên chỉ cần chạy nhanh và ổn định là được!
Im a british accent lover
Comment
-
Originally posted by 08520016 View PostThật thế hok? Tại sao lại kêu "chờ rất lâu" ? hiệu suất hok đảm bảo?University of Information Technology - Faculty of Computer Engineering
[ E ] 09520401@gm.uit.edu.vn || dangdx.es@gmail.com
[ F ] https://www.fb.com/dangdao261
:happy:
Comment
-
Em cũng nhận ra điều đó khi anh highlight comment của em!
Nhưng em dùng một biến boolean và wait(5) thì nó vẫn đồng bộ được, có điều là hiệu suất giảm đi rất nhiều!University of Information Technology - Faculty of Computer Engineering
[ E ] 09520401@gm.uit.edu.vn || dangdx.es@gmail.com
[ F ] https://www.fb.com/dangdao261
:happy:
Comment
-
Code:public class Prime { private boolean syn = false; private int prime; private int time; public Prime(boolean syn, int time){ this.syn = syn; this.time = time; } public int getPrime(){ return prime; } public static boolean isPrime(int x){ if(x < 2) return false; else if(x == 2) return true; for(int i = 2; i <= Math.sqrt((double)x); ++i) if(x % i == 0) return false; return true; } public synchronized void setPrime(int prime){ while(!syn){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print("So nguyen to hien tai la: " + prime); this.prime = prime; syn = false; notifyAll(); } public synchronized void showSum(long sum){ while(syn){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print(" - Tong so nguyen to: " + (sum + prime) + "\r\n"); syn = true; notifyAll(); try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } }
Mình có thể gợi ý theo cách của mình là:
Thread tìm số nguyên tố sẽ chạy từ 1000 -> 1000000
Thread tìm tổng sẽ chạy khi số nguyên tố hiện tại < 1000000 => nảy sinh vấn đề là nó sẽ không ngưng lại được do kết quả bên thread kia ngừng với số nguyên tố cuối cùng chắc chắn là < 1000000(nói đến đây thì chắc các bạn cũng biết làm cách nào để ngắt thread thứ 2 rồi)
Bài này khá giống bài toán socola, chỉ khó hơn một tí
Với bài sắp 2 mảng thì có vẻ phức tạp hơn tí, mình lười nên code buble sort với 1000000 phần tử thì hai thread chạy mỗi thread mất khoảng hơn 400s - với số random < 1000 và > -1000(cái này ngậm cười nơi chín suối vì ngồi đợi). Post lên mất mặt nên chỉ post bài này thôi!
Hi vọng giúp được bạn, chúc bạn học tốt!
Comment
-
Mình thấy có một số chương trình sử dụng kết hợp: ThreadPoolExecutor, executors, CountDownLatch trong sử lý đa tiến trình và đồng bộ hoá. Các bạn xem thử có thể áp dụng mấy cái này trong trường hợp của mình không.
Comment
-
Comment