Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.concurrent.ArrayBlockingQueue;
- import java.util.concurrent.BlockingQueue;
- /**
- * Unser eigener Thread zum asynchronen Ausführen von Runnables (in denen z.B. Datenbank Traffic stattfinden kann)
- */
- public class RunnableQueueThread extends Thread {
- private boolean keepProcessingQueue = true;
- private BlockingQueue<Runnable> queue;
- public RunnableQueueThread() {
- queue = new ArrayBlockingQueue<>( 30 );
- setName( "DB_QueueThread" ); // Name des Threads
- setDaemon( true ); // Daemon Threads halten die JVM nicht am Laufen, d.h. wenn es nur noch Daemon Threads gibt (und keine normalen mehr) wird sie beendet
- }
- public boolean offerRunnable( Runnable r ) {
- if ( r != null ) {
- return queue.offer( r );
- } else
- return false;
- }
- public void stopProcessing() {
- keepProcessingQueue = false;
- }
- @Override
- public void run() { // Wird ausgeführt wenn der Thread gestartet wird
- while ( keepProcessingQueue ) { // Solange die Queue weiter abgearbeitet werden soll, wird ein neues Runnable Element aus der Queue geholt und ausgeführt
- Runnable r = null;
- try {
- r = queue.take();
- } catch ( InterruptedException e ) {
- Main.logThrowable( "Das Warten auf ein Runnable Element in der Queue wurde unterbrochen! Beginne erneut...", e );
- }
- if ( r != null )
- try {
- r.run();
- } catch ( Exception e ) {
- Main.logThrowable( "Exception/Error während ein Runnable lief: ", e );
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement