Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #29292
| From | Kevin McMurtrie <mcmurtrie@pixelmemory.us> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: thread pool |
| References | <lqlna0$23fm$1@ariadne.rz.tu-clausthal.de> |
| Date | 2014-07-24 20:50 -0700 |
| Message-ID | <mcmurtrie-7125E3.20501524072014@news.sonic.net> (permalink) |
| Organization | Sonic.Net |
In article <lqlna0$23fm$1@ariadne.rz.tu-clausthal.de>,
Philipp Kraus <philipp.kraus@flashpixx.de> wrote:
> Hello,
>
> I would like to create a thread pool with threads, which are should
> stopped by the user.
> So I create my pool with
>
> m_pool = Executors.newCachedThreadPool();
> for (int i = 0; i < m_barrier.getParties(); i++)
> m_pool.submit(new Worker(m_barrier));
>
> my Worker implements Runnable with the run-method
>
> while (!Thread.currentThread().isInterrupted()) {
> // do something
> }
>
> Within the while-loop I run my barrier and I catch the InterruptedException
>
> I would like to create a thread pool with a number of threads, which
> runs until the user
> sends a stop signal. At the moment I run m_pool.shutdown() and/or
> shutdownNow(), but
> which way is the correct Java structure. My target is, that a method
> creates all threads
> of the pool, each thread runs unlimited time until the user sends a
> stop signal.
>
> Thanks a lot
>
> Phil
Executors are used to run a fluctuating number of tasks with some stable
number of threads. It's not meant for the way you're using it. Just
create real Threads (or Runnable for real Threads).
public class ThreadFooCPUIntensive
{
volatile WorkerFoo threads[]= null;
public synchronized void start ()
{
if (threads == null)
{
threads= new WorkerFoo[5];
for (int i= 0; i < threads.length; ++i)
threads[i]= new WorkerFoo();
for (int i= 0; i < threads.length; ++i)
threads[i].start();
}
}
public void stop () throws InterruptedException
{
final Thread origThreads[];
synchronized (this)
{
origThreads= threads;
threads= null;
}
if (origThreads != null)
for (int i= 0; i < origThreads.length; ++i)
origThreads[i].join();
}
class WorkerFoo extends Thread
{
@Override
public void run()
{
final WorkerFoo origThreads[]= threads;
while (origThreads == threads)
{
//CPU intensive stuff
}
}
}
}
--------------- or ------------------------
public class ThreadFooIOIntensive
{
WorkerFoo threads[]= null;
public synchronized void start ()
{
if (threads == null)
{
threads= new WorkerFoo[5];
for (int i= 0; i < threads.length; ++i)
threads[i]= new WorkerFoo();
for (int i= 0; i < threads.length; ++i)
threads[i].start();
}
}
public void stop () throws InterruptedException
{
final Thread origThreads[];
synchronized (this)
{
origThreads = threads;
threads = null;
}
if (origThreads != null)
{
for (int i = 0; i < origThreads.length; ++i)
origThreads[i].interrupt();
for (int i = 0; i < origThreads.length; ++i)
origThreads[i].join();
}
}
class WorkerFoo extends Thread
{
@Override
public void run()
{
try
{
while (true)
{
//IO intensive stuff
}
}
catch (InterruptedIOException e)
{
}
catch (InterruptedException e)
{
}
}
}
}
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Find similar | Unroll thread
thread pool Philipp Kraus <philipp.kraus@flashpixx.de> - 2014-07-22 15:00 +0200
Re: thread pool Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-07-22 09:11 -0400
Re: thread pool Philipp Kraus <philipp.kraus@flashpixx.de> - 2014-07-22 16:32 +0200
Re: thread pool Philipp Kraus <philipp.kraus@flashpixx.de> - 2014-07-22 21:38 +0200
Re: thread pool Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-07-22 16:29 -0400
Re: thread pool Philipp Kraus <philipp.kraus@flashpixx.de> - 2014-07-22 23:01 +0200
Re: thread pool Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-07-22 17:14 -0400
Re: thread pool Philipp Kraus <philipp.kraus@flashpixx.de> - 2014-07-23 08:11 +0200
Re: thread pool Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-07-23 07:24 -0400
Re: thread pool Philipp Kraus <philipp.kraus@flashpixx.de> - 2014-07-23 15:57 +0200
Re: thread pool Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-07-23 11:41 -0400
Re: thread pool Philipp Kraus <philipp.kraus@flashpixx.de> - 2014-07-24 09:55 +0200
Re: thread pool Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-07-24 08:39 -0400
Re: thread pool Kevin McMurtrie <mcmurtrie@pixelmemory.us> - 2014-07-24 20:50 -0700
csiph-web