千家信息网

Java单线程会导致死锁吗

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"Java单线程会导致死锁吗",在日常操作中,相信很多人在Java单线程会导致死锁吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java单线程会导致死
千家信息网最后更新 2026年11月02日Java单线程会导致死锁吗

这篇文章主要介绍"Java单线程会导致死锁吗",在日常操作中,相信很多人在Java单线程会导致死锁吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java单线程会导致死锁吗"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

死锁从文字理论上说明的是两个线程,可以认为是两个人A和B,A在等待B完成某件事情,B又在等待A完成某件事情。

那如果在代码中,单线程的某个函数,有没有可能导致死锁呢?

我们看下面的代码

#include#include#include#include#include pthread_mutex_t mutex;int main(){    pthread_mutex_init(&mutex,NULL);    printf("mutex init\n");    pthread_mutex_lock(&mutex);    printf("mutex lock#1\n");    pthread_mutex_lock(&mutex);    printf("mutex lock#2\n");    pthread_mutex_unlock(&mutex);    pthread_mutex_unlock(&mutex);    pthread_mutex_destroy(&mutex);    return 0; }

你看这样的代码会不会导致死锁呢?

线程在上锁后,又马上继续尝试上锁,这样的情况会不会存在?

类似这样的代码

int test_function(void){  //lock  do_something()  if(x) return -1  //unlock}

在上锁后,然后下面会因为某种判断后退出,下一次进来后,又会进行上锁,这样的死锁是因为代码逻辑不正确导致的,也是很多新手常犯的问题。

如果是两个线程死锁的情况呢?

#include #include #include #include pthread_mutex_t g_mutex_lock;pthread_mutex_t g_mutex_lock2;void *func1(void* args){    printf("%s(),LINE=%d\n",__FUNCTION__,__LINE__);    pthread_mutex_lock(&g_mutex_lock);    sleep(1);    pthread_mutex_lock(&g_mutex_lock2);    printf("%s(),LINE=%d\n",__FUNCTION__,__LINE__);    pthread_mutex_unlock(&g_mutex_lock);    pthread_mutex_unlock(&g_mutex_lock2);    return NULL;}void *func2(void* args){    printf("%s(),LINE=%d\n",__FUNCTION__,__LINE__);    pthread_mutex_lock(&g_mutex_lock2);    sleep(1);    pthread_mutex_lock(&g_mutex_lock);    printf("%s(),LINE=%d\n",__FUNCTION__,__LINE__);    pthread_mutex_unlock(&g_mutex_lock2);    return NULL;}int main(void){    int ret;    pthread_t thread_1;    pthread_t thread_2;    printf("%s(),LINE=%d\n",__FUNCTION__,__LINE__);    ret = pthread_mutex_init(&g_mutex_lock, NULL);    if (ret != 0) {        printf("mutex init failed\n");        return -1;    }    ret = pthread_mutex_init(&g_mutex_lock2, NULL);    if (ret != 0) {        printf("mutex2 init failed\n");        return -1;    }    pthread_create(&thread_1, NULL, func1, NULL);    pthread_create(&thread_2, NULL, func2, NULL);    pthread_join(thread_1, NULL);    pthread_join(thread_2, NULL);    pthread_mutex_destroy(&g_mutex_lock);    pthread_mutex_destroy(&g_mutex_lock2);    printf("%s(),LINE=%d\n",__FUNCTION__,__LINE__);    return 0;}

上面的代码比较典型了

线程1拿到1号锁后,开始等待2号锁,线程2拿到2号锁后,就开始等待一号锁。他们属于互相等待的情况。

代码输出

linux@ubuntu:/study$ gcc argc.c -pthread && ./a.out
main(),LINE=37
func1(),LINE=11
func2(),LINE=23

最后,线程出现死锁不会正常情况不会导致crash,除非代码上因为加锁存在的一些空指针。

所以单线程也是有可能导致死锁的。

到此,关于"Java单线程会导致死锁吗"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

线程 死锁 代码 情况 学习 两个 事情 更多 理论 问题 面的 帮助 实用 接下来 典型 函数 指针 文字 文章 新手 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 亿人帮互联网科技有限公司 广东猪兼强互联网科技有限公司 深圳九邦互联网科技有限公司 山东特亿宝互联网科技有限公司 美国互联网保险保险科技 互联网最新的科技有限公司 互联网金融公司科技 互联网科技公司官网 美国互联网黑科技 互联网金融 科技创新 互联网汽车科技小镇 苏州五指互联网络科技有限 晓花互联网科技有限公司网址 移动互联网年度科技创新 成都互联网科技公司工作好不好 晋城互联网科技 中和天地互联网科技有限公司 城市宝互联网科技有限公司 风投北京互联网科技 南京一网一红互联网科技有限公司 哈尔滨大商圈互联网科技有限公司 广州百单互联网科技有限公司 互联网科技公司怎么样 嘟嘟瓜互联网科技 郑州华宇互联网科技 恒生科技互联网指数分析 青岛中康互联网医疗科技有限公司 中国互联网有什么科技含量 上海互联网科技公司ppt 山东蛋芒互联网科技有限公司
0