Я создаю несколько потоков из timertask, и все работает отлично для первого выполнения timertask. Но когда timertask выполняется во второй раз, Thread.start() не вызывает метод run(). Я пробовал каждый вариант, с которым сталкивался в Интернете, но ничего не работает. Кто-нибудь может мне помочь, пожалуйста !!! :(TimerTask + multiThreading + java, не работает для второго выполнения
Это, как я график TimerTask:
Timer timer = new Timer();
timer.scheduleAtFixedRate(new orderProcessScheduler(), getDate(), interval_period);
Вот TimerTask:
public class orderProcessScheduler extends TimerTask{
public void processOrders()
{
try
{
int totalThreads = 10;
List<orderThreadImpl> threadPool = new ArrayList<orderThreadImpl>();
for(int i = 0;i<totalThreads;i++)
{
threadPool.add(new orderThreadImpl());
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
processOrders();
}
}
Вот реализация потока:
public class orderThreadImpl implements Runnable{
private Thread t;
@Override
public void run() {
// TODO Auto-generated method stub
try
{
// code for what this thread is suppose to do
}
catch(Exception e)
{
e.printStackTrace();
}
}
public orderThreadImpl()
{
this.t = new Thread(this);
t.start();
}
Вы должны рассмотреть возможность использования ThreadPoolExecutor https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html – Xvolks
Не делать 'новую тему (это). start() 'в конструкторе! Это потенциально позволяет новому потоку видеть объект 'this' в частично инициализированном или неинициализированном состоянии. Google для «утечки этого» для получения дополнительной информации. –
Ваша переменная 'threadPool' имеет обманчивое имя: Обманчиво, потому что это не _pool_, если вы не используете повторное использование потоков. Задача таймера создает все новые потоки при каждом запуске. –