/* * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the * NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS * OF ANY KIND, either express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.felix.scr.integration.components.concurrency; import org.osgi.service.component.ComponentFactory; import org.osgi.service.component.ComponentInstance; public class AFactory implements Runnable { private ComponentFactory _aFactory; private Thread[] _threads = new Thread[2]; public void bindAFactory(ComponentFactory aFactory) { _aFactory = aFactory; } void activate() { System.out.println("AFactory started"); for (int i = 0; i < _threads.length; i++) { _threads[i] = new Thread(this); _threads[i].start(); } } void deactivate() { System.out.println("AFactory stopped"); for (int i = 0; i < _threads.length; i++) { _threads[i].interrupt(); // try { // _threads[i].join(); // } catch (InterruptedException e) { // } } } public void run() { while (true) { try { //System.out.println("Creating A"); ComponentInstance ci = _aFactory.newInstance(null); ci.dispose(); if (Thread.currentThread().isInterrupted()) { return; } } catch (Throwable t) { if (!(t instanceof InterruptedException)) { //System.out.println("AFactory thread exiting: got exception: " + t.toString()); } return; } } } }