- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi biết rằng không nên gọi phương thức chạy để bắt đầu một luồng thực thi mới, nhưng ý tôi là bài viết nàyHọ gọi một phương thức chạy khác runnable.run();
, điều này dường như ngụ ý rằng nó bắt đầu một chuỗi mới hoặc hoàn toàn không bắt đầutạo ra/strong> Tạo luồng, nó chỉ tạo một luồng mới và chạy tất cả các luồng có thể chạy được trong cùng một luồng, tức là theo từng tác vụ?
Đây là mã được đề cập trong bài viết.
lớp công khai ThreadPool {
riêng tư BlockingQueue taskQueue = null;
Danh sách riêng tư chủ đề = new ArrayList();
boolean riêng tư isStopped = false;
public ThreadPool(int noOfThreads, int maxNoOfTasks){
taskQueue = BlockingQueue mới(maxNoOfTasks);
for(int i=0; i
thread.add(new PoolThread(taskQueue));
}
for(Chủ đề PoolThread : chủ đề){
thread.start();
}
}
thực thi void được đồng bộ hóa công khai (Tác vụ có thể chạy được) ném Ngoại lệ {
if(this.isStopped) ném
new IllegalStateException("ThreadPool đã dừng");
this.taskQueue.enqueue(task);
}
void stop được đồng bộ hóa công khai(){
this.isStopped = true;
for(Chủ đề PoolThread : chủ đề){
thread.doStop();
}
}
}
Và
lớp công khai PoolThread mở rộng Chủ đề {
riêng tư BlockingQueue taskQueue = null;
boolean riêng tư isStopped = false;
public PoolThread(Hàng đợi BlockingQueue){
taskQueue = hàng đợi;
}
công khai void run(){
while(!isStopped()){
try{
Runnable runnable = (Runnable) taskQueue.dequeue();
runnable.run();
} bắt(Ngoại lệ e){
// ghi nhật ký hoặc báo cáo ngoại lệ,
// nhưng vẫn giữ cho thread trong nhóm tồn tại.
}
}
}
void doStop() được đồng bộ hóa công khai
isStopped = đúng;
this.interrupt(); //ngắt luồng nhóm ra khỏi lệnh gọi dequeue().
}
boolean được đồng bộ hóa công khai isStopped(){
return isStopped;
}
}
câu hỏi:
Tại sao thread.start(); Nó có được gọi trong hàm tạo không?
nếu như thread.start(); Làm cách nào để truy vấn nhiệm vụ của tôi trước khi được gọi this.taskQueue.enqueue(task);
Để hiểu tất cả điều này, hãy đăng một lớp trình điều khiển cho ví dụ nàymaxNoOfTasks=10 Và noOfThreads=3. Đầu ra giống nhau, mọi trợ giúp đều được đánh giá cao.
Cảm ơn
câu trả lời hay nhất
tôi đang đề cập đến bài viết này nơi họ đã gọi
runnable.run()
; bên trong một phương thức chạy khác và có vẻ như nó ngụ ý rằng nó bắt đầu một luồng mới.
Nhìn vào đoạn mã, tôi không thấy hàm ý gì cả.
Đây không phải là bắt đầu một chủ đề mới. Nó đang chạy cái tiếp theo trong hàng đợi trên luồng nhóm hiện tại Có thể chạy được
.
Tôi biết rằng không nên gọi phương thức chạy đó để bắt đầu thực thi luồng mới...
KHÔNGkhông nên,不能. :-) gọi chạy
Chỉ cần gọi nó trên chủ đề hiện tại chạy
, giống như bất kỳ cuộc gọi phương thức nào khác.
- Tại sao
thread.start();
được gọi là hàm tạo bên trong?
Bắt đầu chỉ sử dụng PoolThread mới (taskQueue)
Đã tạo chủ đề.
- Làm cách nào để tôi thực hiện nhiệm vụ của mình nếu
thread.start();
được gọi ngay cả trước khi gọithis.taskQueue.enqueue(task);
Bạn chuyển nó chothi hành
. Nó được thêm vào hàng đợi việc cần làm (hàng đợi nhiệm vụ
). ThreadPool
创建的 PoolChủ đề
Người ta sẽ nhận được nó vào lần tiếp theo nó miễn phí.
- Để hiểu tất cả những điều này, vui lòng đăng một lớp trình điều khiển cho ví dụ này với maxNoOfTasks=10 và noOfThreads=3. và đầu ra tương tự sẽ được đánh giá cao.
Tôi không biết ý của bạn về hạng lái xe là gì, nhưng tôi nghĩ chỉ cần trả lời câu hỏi là đủ.
- Làm
Runnable.run()
phương pháp chạy bên trong bắt đầu một chủ đề mới?
没有。
Để hiểu điều này làm gì, hãy tưởng tượng bạn tạo một ThreadPool
. ThreadPool
Hàm tạo ngay lập tức tạo và bắt đầu năm PoolChủ đề
chủ đề. Những chủ đề này liên tục kiểm tra hàng đợi nhiệm vụ
để xem có việc gì phải làm không và nếu có thì họ sẽ làm.
Tất nhiên, ban đầu,hàng đợi nhiệm vụ
luôn trống nên luồng đang bận chờ, liên tục quay để kiểm tra hàng đợi nhiệm vụ
nội dung trong. (Điều này không lý tưởng, nó tiêu tốn CPU mà không có lý do. Sẽ tốt hơn nếu tạm dừng luồng khi không có gì để làm, nhưng điều này đang bắt đầu ngày càng xa rời vấn đề thực tế.)
Sau đó, tại một thời điểm nào đó, bạn gọithi hành
và vượt qua trong một nhiệm vụ. Điều này sẽ thêm nó vào hàng đợi nhiệm vụ
. Lần tiếp theo một trong năm chủ đề kiểm tra hàng đợi nhiệm vụ
nội dung trong , nó sẽ tìm vàchủ đề này(không phải chủ đề mới).
Về java - Có thể bắt đầu một chuỗi bằng cách gọi run() trong phương thức run() không? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/50582818/
Tôi có một câu lệnh if như sau if (not(fullpath.low().endswith(".pdf")) hay không (fullpath.low().endswith(tup
Tuy nhiên, trong PHP, can: chỉ xuất hiện nếu $foo là đúng. Trong Javascript, có thể.
XML có nhiều lợi ích. Nó vừa có thể đọc được bằng máy vừa có thể đọc được bằng con người, có định dạng chuẩn hóa và được sử dụng rộng rãi. Nó cũng có một số nhược điểm. Đó là cách dài dòng và không phải là cách hiệu quả để truyền lượng lớn dữ liệu. Một trong những khía cạnh hữu ích nhất của XML là ngôn ngữ lược đồ. Sử dụng chế độ này, bạn có thể
Vì tôi đã sử dụng SQL2000 được lâu nên tôi thực sự không hiểu sâu về các biểu thức bảng chung. Các câu trả lời tôi đưa ra ở đây (#4025380) và ở đây (#4018793) đi ngược lại quy trình vì chúng không sử dụng CTE. Tôi đánh giá cao họ vì đã cung cấp
Tôi có một ứng dụng: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { ném n
Mã của tôi là như sau. Có lẽ tôi đang sử dụng nó nhiều lần theo cách tương tự, tức là tôi đang quản lý các phiên và giao dịch theo cách này: List user= null;
Khi phát triển các ứng dụng web J2EE, tôi thường tổ chức cấu trúc gói của mình như sau com.jameselsey.. Bộ điều khiển - Bộ điều khiển/Hành động Tới đây Dịch vụ - Lớp dịch vụ giao dịch, được sử dụng bởi bộ điều khiển có tên Miền - Ứng dụng Lớp/đối tượng miền của tôi D
Điều này chỉ vì tò mò hơn bất cứ điều gì quan trọng, nhưng tôi chỉ đang thắc mắc về đoạn tài liệu sau đây từ memmove: Quá trình sao chép diễn ra như thể bộ đệm trung gian là chúng tôi
Nén đường dẫn liên quan đến việc chỉ định nút gốc là nút cha mới của mọi nút trên đường dẫn - điều này có thể hạ thấp thứ hạng của nút gốc và có thể hạ thứ hạng của tất cả các nút trên đường dẫn. Có cách nào để giải quyết vấn đề này? Có cần thiết phải giải quyết vấn đề này không? Hoặc có thể coi hạng là giới hạn trên của chiều cao của cây chứ không phải là chiều cao chính xác? Cảm ơn
Tôi có hai lớp, A và B. A là lớp cha của B, tôi có một hàm đưa con trỏ tới một lớp loại A, kiểm tra xem nó có thuộc loại B hay không và nếu có thì sẽ gọi một hàm khác đưa con trỏ tới một lớp loại B. Khi một hàm gọi một hàm khác, tôi
Có cách nào để làm cho valgrind sử dụng nhiều bộ xử lý không? Tôi đang thực hiện một số phân tích tắc nghẽn bằng cách sử dụng callgrind của valgrind và nhận thấy rằng việc sử dụng tài nguyên trong ứng dụng của tôi hoạt động khác với trong valgrind/callgrind
Giả sử chúng ta muốn sử dụng ReaderT[(a,b)] thay vì Maybe monad và sau đó chúng ta muốn tra cứu trong danh sách. Bây giờ, một cách đơn giản và không phổ biến là: khả năng đầu tiên là tìm a = ReaderT (looku
Có vẻ như có vấn đề với mã của tôi. Điều tôi cần nói là: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
Theo bài viết này (tháng 4 năm 2018), AKS có thể đặt Pod một cách thông minh trên các miền bị lỗi khi chạy trong nhóm khả dụng, nhưng chưa tính đến các miền cập nhật. Các miền cập nhật sẽ sớm được sử dụng để đưa nhóm vào AKS phải không? Câu trả lời hay nhất Khi bạn thiết lập cụm, nó sẽ tự động
khóa học | phần loại comart2 : bsit201 : lec comart2 :
Tôi đang phát triển SDK của riêng mình, SDK này dựa trên một số SDK của bên thứ 3. Ví dụ - OkHttp. Tôi có nên thêm OkHttp vào build.gradle của mình hay để người dùng SDK của tôi đưa nó vào? trong trường hợp này,
Khi Rust trở nên chín chắn hơn, sự quan tâm của tôi đối với nó bắt đầu nảy sinh. Tôi thích thực tế là nó hỗ trợ các kiểu dữ liệu đại số, đặc biệt là những kiểu dữ liệu phù hợp, nhưng bạn có ý tưởng nào cho các thành ngữ chức năng khác không? Ví dụ: có một tập hợp các hàm lọc/bản đồ/thu gọn tiêu chuẩn trong thư viện tiêu chuẩn và quan trọng hơn là bạn có thể
đóng cửa. Câu hỏi này không tuân thủ các nguyên tắc của Stack Overflow. Hiện tại nó không chấp nhận câu trả lời. Sự cố này dường như không liên quan đến việc lập trình trong phạm vi được xác định trong trung tâm trợ giúp. . Đã đóng cửa 9 năm trước. Cải thiện
Tôi đã nghiên cứu các đối tượng trong PHP. Tất cả các ví dụ tôi đã thấy thậm chí còn sử dụng các hàm tạo đối tượng trên các đối tượng của chính chúng. PHP có buộc bạn phải làm điều này không? Nếu có thì tại sao? Ví dụ: firstname = $firstname;
...hơn mảng kết hợp? Mảng kết hợp có chiếm nhiều bộ nhớ hơn không? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- chỉ số là 11;
Tôi là một lập trình viên xuất sắc, rất giỏi!