PDA

View Full Version : تعیین تعداد ماکسیموم Thread



hamedg1366
جمعه 15 اسفند 1393, 17:54 عصر
با سلام و خسته نباشید

دوستان چطور میتونیم نخ های ایجاد شده در برنامه رو مدیریت کنیم و اجازه ندیم بیش از حد ایجاد بشه ،

بعنوان مثال اگه در برنامه ای آرایه ای به تعداد 1000000 رکورد داشته باشم و نیاز باشه تمامی رکوردها رو برای پردازش به AsyncTask خاصی بفرستیم ، اون رو چطور مدیریت کنیم که out of memory پیش نیاد


از اونجائی که اطلاعات دقیقی درباره Thread و AsyncTask ندارم و تفاوتشون رو نمیدونم اگه سوالم اشتباه باشه به بزرگی خوردتون ببخشید و راهنمائی بفرمائید.


با جستجو توی نت به این کد برخوردم :


ExecutorService executor = Executors.newFixedThreadPool(5);



آیا فقط نوشتن همین تک خط کافی میتونه باشه ؟

hamedg1366
جمعه 15 اسفند 1393, 17:55 عصر
کد کامل :




package com.journaldev.threadpool;

public class WorkerThread implements Runnable {

private String command;

public WorkerThread(String s){
this.command=s;
}

@Override
public void run() {
System.out.println(Thread.currentThread().getName( )+" Start. Command = "+command);
processCommand();
System.out.println(Thread.currentThread().getName( )+" End.");
}

private void processCommand() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

@Override
public String toString(){
return this.command;
}
}





و



package com.journaldev.threadpool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class SimpleThreadPool {

public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
Runnable worker = new WorkerThread("" + i);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
System.out.println("Finished all threads");
}

}






و خروجی برنامه :


pool-1-thread-2 Start. Command = 1
pool-1-thread-4 Start. Command = 3
pool-1-thread-1 Start. Command = 0
pool-1-thread-3 Start. Command = 2
pool-1-thread-5 Start. Command = 4
pool-1-thread-4 End.
pool-1-thread-5 End.
pool-1-thread-1 End.
pool-1-thread-3 End.
pool-1-thread-3 Start. Command = 8
pool-1-thread-2 End.
pool-1-thread-2 Start. Command = 9
pool-1-thread-1 Start. Command = 7
pool-1-thread-5 Start. Command = 6
pool-1-thread-4 Start. Command = 5
pool-1-thread-2 End.
pool-1-thread-4 End.
pool-1-thread-3 End.
pool-1-thread-5 End.
pool-1-thread-1 End.
Finished all threads

tux-world
شنبه 16 اسفند 1393, 00:25 صبح
دوست عزیز شما سوالایی که میپرسید خیلی گنگ هستن. چرا برای آرایه از ترد میخوایی استفاده کنی؟ منظورت از این کار چیه؟ یه آرایه که انقدر نیاز نیست داده داشته باشه احتمالا شما بد توجیه شدید برای برطرف کردن مشکلتون. و احتمال زیاد این که دارید راه رو اشتباه میرید دقیق تر توضیح بدید متوحه بشیم کمکتون کنیم

hamedg1366
شنبه 16 اسفند 1393, 09:31 صبح
دوست عزیز شما سوالایی که میپرسید خیلی گنگ هستن. چرا برای آرایه از ترد میخوایی استفاده کنی؟ منظورت از این کار چیه؟ یه آرایه که انقدر نیاز نیست داده داشته باشه احتمالا شما بد توجیه شدید برای برطرف کردن مشکلتون. و احتمال زیاد این که دارید راه رو اشتباه میرید دقیق تر توضیح بدید متوحه بشیم کمکتون کنیم


با سلام و تشکر بابت جوابتون دوست عزیز

شما همیشه استاد و راهنمای من بودین :لبخندساده: . راستش من هنوز درگیر دانلود تصاویر از نت هستم ، برای اینکار خیلی تلاش کردم از کتابخانه Universal Image Downloader استفاده کنم حتی برای شما هم پیام خصوصی فرستاده بودم (...) اما خب نتونستم آداپتری بنویسم که تصاویر رو با این کتابخونه توی لیست ویو لود یا کش کنه ، پس بجای اینکار اومدم لینک تصاویر را درون یه آرایه ریختم و اون رو اومدم دادم به AysnTask تا دانلود کنه ، الان برنامه مشکلی نداره داره کار میکنه اما برای اینکه بهینه بشه و در آینده به مشکلی برنخوره میخواستم مدیریت کنم که همزمان بیشتر از Nتصویر دانلود نشه تا مشکل Memory و... پیش نیاد،

امیدوارم حرف رو تونسته باشم برسونم.

hamedg1366
شنبه 16 اسفند 1393, 21:16 عصر
up...:ناراحت:

(نوشته شما بسیار اندک است ، تعداد کاراکتر های هر نوشته دست کم 10 عدد میبایست باشد.)