Java单线程会导致死锁吗
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章主要介绍"Java单线程会导致死锁吗",在日常操作中,相信很多人在Java单线程会导致死锁吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java单线程会导致死
千家信息网最后更新 2025年11月10日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安全错误
数据库的锁怎样保障安全
希望之村服务器更新公告
三一重工软件开发面试流程
武装突袭3服务器进不去怎么办
防范网络安全的标语
个人信息信用数据库建立时间
数据库中float长度
浙江省服务器托管云主机
高中生关于网络安全演讲稿
长沙移动软件开发服务
数据库rollback
广州智合互联网科技有限公司
c 中数据库信息修改代码
网络技术服务指标
长宁区创新软件开发定制大概费用
万方数据库免费帐号
服务器数据中心视频
荆州定制软件开发电话
网络安全选择题库
分布式实时数据库生产
广电网络安全教育学校
dell4400服务器
低版本的表格导入不了数据库
怎么删除php数据库记录
数据库连接方法视频
网络安全财报分析
服务器分机怎么开视频
交换机能连服务器吗
非结构化数据库技术
gentoo服务器
网络rtk与服务器断开连接