openjdk中周期线程为WatcherThread,在
jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
............
if (PeriodicTask::num_tasks() > 0) {
WatcherThread::start(); //启动周期线程
}
.............
}
看看WatcherThread构造函数
WatcherThread::WatcherThread() : Thread() {
if (os::create_thread(this, os::watcher_thread)) {//此步仅创建线程,并不自动运行
_watcher_thread = this;
os::set_priority(this, MaxPriority);
if (!DisableStartThread) {
os::start_thread(this); //运行刚创建的线程
}
}
}
由前文《java.lang.Thread.start》可知,在start之后将运行WatcherThread::run方法。
void WatcherThread::run() {
.........
while(!_should_terminate) {
const size_t time_to_wait = PeriodicTask::time_to_wait(); //计算下一个任务所需等待的最小时间
os::sleep(this, time_to_wait, false);
//上面的等待其实和linux操作系统的定时任务原理一样,只不过操作系统是根据更低层的时间节拍来计算。
.........
PeriodicTask::real_time_tick(time_to_wait);//在PeriodicTask中调用任务
//没有任务,退出,个人感觉没有任务等待应该更好,不知道为何这样设计
if (PeriodicTask::num_tasks() == 0) {
_should_terminate = true;
}
}
}
void PeriodicTask::real_time_tick(size_t delay_time) {
...........
for(int index = 0; index < _num_tasks; index++) {
_tasks[index]->execute_if_pending(delay_time); //执行任务
}
}
加入任务队列,是通过下面的方法
void PeriodicTask::enroll() {
if (_num_tasks == PeriodicTask::max_tasks)
fatal("Overflow in PeriodicTask table");
_tasks[_num_tasks++] = this;
}
分享到:
相关推荐
openjdk11 full javafx
openjdk-8-jdk_8u91-b14-0ubuntu4~14.04_amd64.deb openjdk-8-jre_8u91-b14-0ubuntu4~14.04_amd64.deb openjdk-8-jdk-headless_8u91-b14-0ubuntu4~14.04_amd64.deb openjdk-8-jre-headless_8u91-b14-0ubuntu4~14.04_...
openJdk17
openjdk-11
openjdk-17 GA(openjdk-17_linux-aarch64_bin.tar.gz) 适用于Linux aarch64系统
openjdk 17.01 windows版本 解压安装包
openjdk和jdk的区别如下: openjdk是jdk的开源版本,源代码完全相同,但是部分功能无法使用。 openjdk只包含最精简的JDK,而jdk包含很多其他软件包。 openjdk采用GPL V2协议,而jdk采用JRL协议。 openjdk没有部署...
openjdk-18(openjdk-18+36_windows-x64_bin.zip)
openjdk-17源码(openjdk-17+35_src.zip)
openjdk 18 windows版本 解压安装包
openjdk 8 docker 镜像 可离线安装,docker load -i openjdk 8 docker 镜像 可离线安装,docker load -i openjdk 8 docker 镜像 可离线安装,docker load -i openjdk 8 docker 镜像 可离线安装,docker load -i
openjdk 17.01 linux版本 解压安装包
openjdk6 源代码,分开也上传一份,省得太大了。
安装包:java-7-openjdk-amd64.tar.gz 使用方法 1. 拷贝至服务器/个人电脑 2. 解包 mkdir /opt/jdk/ tar -zxvf java-7-openjdk-amd64.tar.gz -C /opt/jdk/ 3. 配置编译环境 JAVA_HOME=/opt/jdk/java-7-openjdk-amd...
OpenJDK Cookbook
ubuntu下使用的openjdk7 openjdk8
ubuntu下,openjdk-7的安装包deb版本
openjdk 1.8.0 离线 rpm 安装包以及其他相关前置依赖 rpm 安装包 java-1.8.0-openjdk-1.8.0.272.b10-1.el8_2.x86_64.rpm
https://bell-sw.com/pages/downloads/#/java-8-lts full version openjdk8
鲲鹏云不支持OracleJDK,只支持OpenJDK与HuaweiJDK,以上是基于ARM架构的OpenJDK,亲测有效。