Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #29292

Re: thread pool

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

Show all headers | View raw


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

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