xref: /AOO41X/main/jurt/com/sun/star/lib/uno/environments/remote/ThreadPoolManager.java (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb) !
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 package com.sun.star.lib.uno.environments.remote;
29 
30 /**
31  * Manages the UNO thread pool factory.
32  *
33  * <P>The thread pool factory is a process-wide resource.  It is important that
34  * all UNO environments within a process share the same thread pool mechanisms:
35  * if a synchronous UNO call is bridged out from one local UNO environment over
36  * one remote bridge, and recursively calls back into another local UNO
37  * environment over another remote bridge, the code in the second environment
38  * should be executed in the thread that did the original call from the first
39  * environment.</P>
40  *
41  * <P>There are both a Java and a native thread pool factory.  A pure Java
42  * process will always use the Java thread pool factory.  A mixed process uses
43  * the system property <CODE>org.openoffice.native</CODE> (to be set by the
44  * native code that starts the JVM) to determine which implementation
45  * to use.</P>
46  */
47 public final class ThreadPoolManager {
48     /**
49      * Creates a thread pool instance.
50      *
51      * @return a new thread pool instance; will never be <CODE>null</CODE>
52      */
53     public static synchronized IThreadPool create() {
54         if (useNative) {
55             return new NativeThreadPool();
56         } else {
57             if (javaFactory == null) {
58                 javaFactory = new JavaThreadPoolFactory();
59             }
60             return javaFactory.createThreadPool();
61         }
62     }
63 
64     /**
65      * Leads to using the native thread pool factory, unless a Java thread pool
66      * has already been created.
67      *
68      * @return <CODE>false</CODE> if a Java thread pool has already been created
69      */
70     public static synchronized boolean useNative() {
71         useNative = javaFactory == null;
72         return useNative;
73     }
74 
75     private static boolean useNative
76     = System.getProperty("org.openoffice.native") != null;
77     private static JavaThreadPoolFactory javaFactory = null;
78 
79     private ThreadPoolManager() {} // do not instantiate
80 }
81