1) Create a job queue called REPORTS selecting MAXACT(*NOMAX). Schedule a job to hold this job queue at 6:00 AM and to release it at 5:00 PM. Teach your end users, change your code and job descriptions or update your new job queue table to send all long running batch reporting jobs to this new job queue. Consider releasing this job queue during nightly backups that use the save while active parameters. You can adjust the hold and release times per your business requirements and system availability. You may need to adjust the MAXACT parameter as well depending upon other system requirements and resource availability.
2) You may need an INVOICING job queue that has a MAXACT(1) parameter. If your invoicing jobs can not be run simultaneously, they may need their own job queue to ensure that they run in a single threaded manner.
3) You might want to setup FAST and SLOW job queues or HIGH and LOW priority job queues. You do need to be careful and make sure that you understand the dependencies within your application. If you have a posting job, an update job and a reporting job that all depend upon the results of the prior job, you need to ensure that these jobs continue to run in the proper sequence. There are many things that a developer can do to eliminate or at least minimize dependencies. If they exist within your environment, you need to ensure that your job queue tuning doesn't wreak havoc.
One of the most common issues that prevent you from multi threading jobs is the use of temporary work files. If these physical files are created and used in a permanent library, these jobs must be single threaded. Get this code changed to create and use these files in the QTEMP library and now you can run as many of these jobs simultaneously as your resources allow.