you can find stuck threads w/ the 'Profiler getCompleteStatusReport' and some text processing.
you can initiate a gentle restart w/ the AppServerLauncher restartAppServer command, in that case you shouldn't need to do anything w/ routing rules. the gentle restart will stop the appserver from taking on new jobs and restart after all wit are done or some time limit is reached.
How often do you see the work items going in the STUCK state ? What sort of jobs are running when this happens
we have some STUCK treads about every 2 or 3 months. It's mainly nshscriptjobs that appear always running on the AS even when they are terminated for several days.