Java LockSupport.park()根据信号调度原理

本文探讨了Java中的LockSupport.park()方法,该方法用于线程等待信号。文章通过分析JVM源码,特别是位于src/os/linux/vm/os_linux.cpp的部分,解释了线程如何在接收到信号后继续执行。此外,还展示了使用C语言实现的类似信号调度功能,编译并运行后,观察到线程每3秒被唤醒一次。最后,提供了参考资料,包括一篇CSDN博客文章,帮助深入理解LockSupport的工作机制。
摘要由CSDN通过智能技术生成

1. 有两个线程

一个线程等待信号,直到获取信号之后再执行下面的代码

一个线程向另一个线程发信号

jvm源码位置

jdk7u/jdk7u/hotspot: 677234770800 src/os/linux/vm/os_linux.cpp

2. c语言实现

signal_wake_up.c

#include<stdio.h>
#include <unistd.h>
#include<pthread.h>
#include <signal.h>
#include<time.h>

pthread_t pt, pt2;

void print_date(){
    time_t time1;
    time(&time1);
    struct tm* t1 = localtime(&time1);
    char buf[50];
    strftime(buf, 50, "%Y-%m-%d %H:%M:%S", t1);
    printf("%s\n", buf);
}

void* thread_run(void* arg){
    sigset_t set;
    sigaddset(&set, SIGALRM);
    for (;;){
        int sig;
        // 等待信号被唤醒
        sigwait(&set, &sig);
        printf("up %d\n", sig);
        print_da
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值