/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed 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 java.lang;
import java.util.logging.Logger;
import java.util.logging.Level;
class VMThread
{
Thread thread;
int vmData;
VMThread(Thread t) {
thread = t;
}
native static void create(Thread t, long stacksize);
static native Thread currentThread();
static native boolean interrupted();
static native void sleep (long msec, int nsec) throws InterruptedException;
static native void yield();
native void interrupt();
native boolean isInterrupted();
/**
* Starts the VMThread (and thus the Java Thread) with the given
* stacksize.
*
* @param stacksize
* The desired stacksize.
*/
void start(long stacksize) {
VMThread.create(thread, stacksize);
}
private static final String UNSUPPORTED_THREAD_METHOD
= "Deprecated Thread methods are not supported.";
/**
* Suspends the Thread.
*/
@SuppressWarnings("ThrowableInstanceNeverThrown")
void suspend() {
Logger.global.log(Level.SEVERE, UNSUPPORTED_THREAD_METHOD,
new UnsupportedOperationException());
}
/**
* Resumes the Thread, assuming it is suspended.
*/
@SuppressWarnings("ThrowableInstanceNeverThrown")
void resume() {
Logger.global.log(Level.SEVERE, UNSUPPORTED_THREAD_METHOD,
new UnsupportedOperationException());
}
/**
* Queries whether this Thread holds a monitor lock on the
* given object.
*/
native boolean holdsLock(Object object);
/**
* Stops the Thread, passing it a Throwable (which might be ThreadDeath).
*/
@SuppressWarnings("ThrowableInstanceNeverThrown")
void stop(Throwable throwable) {
Logger.global.log(Level.SEVERE, UNSUPPORTED_THREAD_METHOD,
new UnsupportedOperationException());
}
native void setPriority(int newPriority);
native int getStatus();
/**
* Holds a mapping from native Thread statii to Java one. Required for
* translating back the result of getStatus().
*/
static final Thread.State[] STATE_MAP = new Thread.State[] {
Thread.State.TERMINATED, // ZOMBIE
Thread.State.RUNNABLE, // RUNNING
Thread.State.TIMED_WAITING, // TIMED_WAIT
Thread.State.BLOCKED, // MONITOR
Thread.State.WAITING, // WAIT
Thread.State.NEW, // INITIALIZING
Thread.State.NEW, // STARTING
Thread.State.RUNNABLE, // NATIVE
Thread.State.WAITING // VMWAIT
};
/**
* Tell the VM that the thread's name has changed. This is useful for
* DDMS, which would otherwise be oblivious to Thread.setName calls.
*/
native void nameChanged(String newName);
}
|