public void run()

in spring-taskqueue/src/main/java/org/apache/archiva/components/taskqueue/execution/ThreadedTaskQueueExecutor.java [87:174]


        public void run( )
        {
            while ( command != SHUTDOWN )
            {
                final T task;

                if ( currentTask.get( ) == null )
                {

                    try
                    {
                        task = queue.poll( 100, TimeUnit.MILLISECONDS );
                    }
                    catch ( InterruptedException e )
                    {
                        logger.info( "Executor thread interrupted, command: {}", ( command == SHUTDOWN
                            ? "Shutdown"
                            : command == CANCEL_TASK ? "Cancel task" : "Unknown" ) );
                        continue;
                    }

                    if ( task == null )
                    {
                        continue;
                    }

                    if ( currentTask.compareAndSet( null, task ) )
                    {
                        try
                        {

                            Future future = executorService.submit( new Runnable( )
                            {
                                @Override
                                public void run( )
                                {
                                    try
                                    {
                                        executor.executeTask( task );
                                    }
                                    catch ( TaskExecutionException e )
                                    {
                                        logger.error( "Error executing task: {}", e.getMessage( ), e );
                                    }
                                }
                            } );

                            try
                            {
                                waitForTask( task, future );
                            }
                            catch ( ExecutionException e )
                            {
                                logger.error( "Error while waiting for task: {}", e.getMessage( ), e );
                            }
                        }
                        finally
                        {
                            currentTask.set( null );
                        }
                    }
                    else
                    {
                        logger.error( "There was another task running! " );
                        try
                        {
                            queue.put( task );
                        }
                        catch ( TaskQueueException e )
                        {
                            logger.error( "Could not put task back to queue" );
                        }
                    }

                }
            }

            currentTask.set( null );

            logger.info( "Executor thread '{}' exited.", name );

            done = true;

            synchronized (this)
            {
                notifyAll( );
            }
        }