ThreadingManager.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Copyright (c) 2009-2010 jMonkeyEngine
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions are
  7. * met:
  8. *
  9. * * Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. *
  12. * * Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the distribution.
  15. *
  16. * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
  17. * may be used to endorse or promote products derived from this software
  18. * without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  22. * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  23. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  24. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  25. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  26. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  27. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  28. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  29. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  30. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. */
  32. package com.jme3.asset;
  33. import java.util.concurrent.*;
  34. /**
  35. * <code>ThreadingManager</code> manages the threads used to load content
  36. * within the Content Manager system. A pool of threads and a task queue
  37. * is used to load resource data and perform I/O while the application's
  38. * render thread is active.
  39. */
  40. public class ThreadingManager {
  41. protected final ExecutorService executor =
  42. Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(),
  43. new LoadingThreadFactory());
  44. protected final AssetManager owner;
  45. protected int nextThreadId = 0;
  46. public ThreadingManager(AssetManager owner){
  47. this.owner = owner;
  48. }
  49. protected class LoadingThreadFactory implements ThreadFactory {
  50. public Thread newThread(Runnable r) {
  51. Thread t = new Thread(r, "jME3-threadpool-" + (nextThreadId++));
  52. t.setDaemon(true);
  53. t.setPriority(Thread.MIN_PRIORITY);
  54. return t;
  55. }
  56. }
  57. protected class LoadingTask<T> implements Callable<T> {
  58. private final AssetKey<T> assetKey;
  59. public LoadingTask(AssetKey<T> assetKey) {
  60. this.assetKey = assetKey;
  61. }
  62. public T call() throws Exception {
  63. return owner.loadAsset(assetKey);
  64. }
  65. }
  66. public <T> Future<T> loadAsset(AssetKey<T> assetKey) {
  67. return executor.submit(new LoadingTask(assetKey));
  68. }
  69. public static boolean isLoadingThread() {
  70. return Thread.currentThread().getName().startsWith("jME3-threadpool");
  71. }
  72. }