首页
学习
活动
专区
圈层
工具
发布

多线程中的死锁是啥意思?

死锁是在开发多线程时才会遇到的。原因就是不同的线程都在等待其它线程释放锁,而其它线程由于一些原因迟迟没有释放,这就造成了所有的线程都开始等待程序出现了假死的现象。说白了这就是一个BUG。...我们用下面简单的程序来模拟一下死锁发生的现象。 ? ? ? ? 发现程序居然不输出了,这就是我们上面所说的死锁现象。所有线程都在等着对方释放锁 ,所以就会出现这种程序假死情况。...因为在多线程中是不太好查找问题所在的。别担心Java为我们提供了一个命令来帮我们快速的查找问题所在。下面的方法就是如果真有死锁发生,我们怎么快速查看问题。 我们用windows系统来演示。...具体的步骤如下: 我们用cmd进入系统的命令窗口。 将目录切换到Jdk安装目录的bin下。 运行Java自带的jps命令 运行jstack -l 进程id 下面看我具体的执行效果: ? ? ?...看到没这个命令直接帮我们定位到了代码中的某一行了,很方便我们查找问题有没有。如果以后在开发多线程中果真遇到了死锁问题,那么我们就可以用上述的方法快速定位问题。

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    linux下,Makefile是啥??

    Linux环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是Unix程序员。...在Linux(unix)环境下使用GNU的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。...Makefile的命名规则 默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、 “makefile”、“Makefile”的文件,在这三个文件名中,最好使用“Makefile...最好不要用“GNUmakefile”,是GNU的make识别的。...Makefile也可以为其他名字,比如makefile.linux,但你需要使用make的参数(-f or --file)制定对应的文件,例如: make -f makefile.linux Makefile

    1.9K20

    Linux下程序是如何被执行的

    之前写过一篇文章 Linux下c语言中的main函数是如何被调用的,该篇文章侧重于从user space层面讲程序的运行,而文章中提到的有关kernel space层面的相关系统调用,比如fork、execve...return retval; ... } 该方法的大致逻辑是: 1. 分配struct linux_binprm实例,并赋值给bprm。 2....linux下可执行文件的格式一般为elf,所以我们直接看其load_binary方法: // fs/binfmt_elf.c static int load_elf_binary(struct linux_binprm...会检查该程序依赖的动态链接库,加载这些库,并解析相应的函数地址 // 之后再调用源程序自己的入口函数,这样,也就对应到文章开始提到的 // main函数是如何被调用的那篇文章了...好了,到这里,整个程序的内核部分的执行流程就讲完了,结合本文开始提到的那篇文章 Linux下c语言中的main函数是如何被调用的,有关linux下程序的执行就全部讲清楚了。

    4.1K20

    linux系统下是如何管理文件的?

    其实说到这里,记得在学校的时候,学过一段时间的文件管理,那个时候还是第一次接触linux,但是接触的是Linux运维方面的知识,学的很浅;通过这几天再次对文件管理的学习,让理解的更深,现在总结分享出来给大家...二、inode结构体: 1、在讲这个之前,我想接触过Linux的好友,都会听过这句话:在linux系统下,一切都是文件。...这个确实是,怎么讲,不知道你有没有注意,在windows下,我们可以看到硬盘分区:C盘、D盘、E盘等,但是你在linux下,你是看不到这样的分盘标识符的。...inode (index node) 表中包含文件系统的所有文件列表 3、在linux系统下,操作系统最初拿到的信息是文件名,最终得到的是文件内容。...三、vnode结构体: 1、在讲这之前,我们还是要讲一下什么是文件描述符,前面的文章我只是简单的讲了一下,这里还是补充一下: a、文件描述符(fd)的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项

    2.6K20

    (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?

    什么是Netfilter? 为了说明这个问题,首先看一个网络通信的基本模型: ?...在数据的发送过程中,从上至下依次是“加头”的过程,每到达一层数据就被会加上该层的头部;与此同时,接受数据方就是个“剥头”的过程,从网卡收上包来之后,在往协议栈的上层传递过程中依次剥去每层的头部,最终到达用户那儿的就是裸数据了...Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能...但是无论如何,这些回调函数最后必须向Netfilter报告一下该数据包的死活情况,因为毕竟每个数据包都是Netfilter从人家协议栈那儿借调过来给兄弟们Happy的,别个再怎么滴也总得“活要见人,死要见尸...如果没有,则直接返回okfn函数指针所指向的函数继续走协议栈;如果有,则调用nf_hook_slow函数,从而进入到Netfilter框架中去进一步调用已注册在该过滤点下的钩子函数,再根据其返回值来确定是否继续执行由函数指针

    3.3K21

    linux下的 du命令 用于做什么,用法是怎样的?

    今天这篇我们来学习和了解“linux下的 du命令 用于做什么,用法是怎样的?”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“linux下的 du命令 用于做什么,用法是怎样的?”...有一定的帮助。有这方面学习需要的朋友就继续往下看吧! 命令用途 du(disk usage)命令可以计算文件或目录所占的磁盘空间。...-X FILE, –exclude-from=FILE 排除掉指定的FILE –exclude=PATTERN 排除掉符合样式的文件,Pattern就是普通的Shell样式,?...–max-depth=N 只列出深度小于max-depth的目录和文件的信息 –max-depth=0 的时候效果跟–s是 一样 使用案例 root@ubuntu:/# cd /home/web/ root...找出大文件 磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁: du -s /home/* | sort -nr 上述内容具有一定的借鉴价值,感兴趣的朋友可以参考

    1.9K30

    Linux下c语言中的main函数是如何被调用的

    当我们在shell下执行一个程序的时候,shell内部首先会用fork系统调用来新建一个进程,然后再用execve系统调用把目标程序加载到内存中,并将其参数及环境变量等压入栈中,之后再执行目标程序的入口函数...由于linux下的程序一般都是elf格式,所以入口函数通常存放在elf header的 e_entry字段里,默认为_start函数。...该_start函数并不是我们写的,而是gcc在编译我们的程序时,将glibc里对应的_start函数嵌入到我们的程序里的。...该段汇编代码的注释已经把其作用讲的很清楚了,大意就是按照c语言的calling convention,先把__libc_start_main函数所需的参数放入到对应的寄存器或栈中,再调用__libc_start_main...exit (result);} 上面就是对应的__libc_start_main函数,由上可见,该函数的参数及其顺序和前面的_start函数里按照c语言的calling convention准备的参数及顺序是一致的

    4.2K20

    LINUX下的PHP

    由于linux系统的稳定性,大部分的PHP服务器都被部署在linux上,而且像redis等扩展在linux能得到更好的支持,所以对于PHP程序员来说,使用linux的功底也相当重要,接下来总结一下我从一开始在...linux下安装配置linux的心得。...linux系统安装 首先是选择linux操作系统,我使用的是Cent OS 6.7 ,它类似红帽系统,简单易接触,而且开源免费。...用过小巧的virtual box,在win7下安装要改theme主题文件,辛苦装好的环境因为未知原因(兼容问题排除后,猜测是BIOS设置的问题,可参考)打不开虚拟机而放弃后,终于选择了VM,VM下安装linux...说一下要注意的地方吧:虚拟机配置选择“桥接模式”,这样,虚拟机和主机就在同一个IP段下,可以很轻松地互相访问,VM下如图: ? 然后是我们经常要遇到的问题网络配置、和虚拟之间的交互、yum配置。

    4.8K80

    Linux下的权限

    1.shell命令以及运行原理 Linux 严格意义上说的是一个操作系统,我们称之为 “ 核心( kernel ) “ ,但我们一般用户,不能直接使用 kernel 。...,重新启动配备一个bash(人手一个王婆) 2.Linux下的用户 3.Linux权限管理 3.1.文件访问者的分类(人) 权限本质上是限制人 ,就是能和不能的问题。...3.4.1.2Linux下文件权限的修改(八进制) 4 .权限验证 那么我们对这些权限进行验证一下 ,我们看看如果没有这些权限我们无法完成什么操作。...4.1Linux下的权限匹配机制 4.2修改文件的拥有者(chown) 格式: chown [参数] 用户名 文件名 功能:修改文件的拥有者 实例: # chown user1 f1...文件名 常用选项: -R 递归修改文件或目录的所属组 这个指令和上面的一样,进行操作的时候也需要超级权限 5.文件类型 5.1Linux下的文件后缀 window下文件类型用后缀表示

    2.9K10

    linux 环境下source 是干嘛的?为什么不执行 source 会报权限?

    简单来说,source是为了让脚本在当前Shell中生效,而“不执行source报权限错误”是因为执行方式不同导致的权限需求不同。下面我将详细拆解这两个问题。1.source是干嘛的?...source(在某些Shell中等同于点号.)是一个Shell内置命令。它的功能是:读取指定文件中的命令,并在“当前Shell环境”中执行它们。核心区别:sourcevs直接执行(....如果是新创建的文件,默认权限通常是rw-r--r--(也就是只有读写权限,没有执行权限)。检查失败->内核直接拒绝运行->报Permissiondenied。.../script.shB.使用source的机制当你输入sourcescript.sh时,你是在告诉当前的Shell(比如Bash):“请读取这个文件的内容,然后由你(Shell)来逐行执行里面的命令”。...、启动服务、批处理希望这个解释能帮你彻底搞懂Linux中的source机制!

    1.2K10

    Linux下的^M困惑

    我们有时在Windows编辑的文件,放到了Linux环境中,打开文件,可能发现每行结尾多了一个“^M”,导致一些在Windows下能执行的解析程序,放到了Linux中,执行就会报错,问题就出在这个"^M...在Linux中vim是无法显示\r,因为ascii中对应的不是Linux中的标准acsii字符,其实其对应的ASCII码十进制形式是13(无显示形式),对应的八进制形式是15(显示为^M)。...对这个问题的解决可能有很多种, 1. 在Windows下使用文本工具进行转换win-->linux,例如notepad++、UltraEdit直接进行转换。 2....在Linux下,可以用dos2unix file,将文件转换格式。 3. 在Linux下,可以用cat file | tr -d "\r" > new_file,进行替换。 4....在Linux下,可以用sed 's/^M//old_file > new_file,进行替换。

    3.2K30

    Linux下的 Fsck 命令

    fsck(file system check)是一个命令行工具,它允许你在一个或者多个 Linux 文件系统进行连续监测和交互式修复操作。...在系统无法启动,或者分区无法被挂载的情况下,你可以使用fsck命令去修复损坏的文件系统。 在这篇文章中,我们将会讨论fsck命令....fsck命令式一些列 linux 文件系统检测的封装,根据文件系统类型不同,它可以接受不同的选项。 对于指定的检测,请检查手册,获取更多信息。...在启动时检测文件系统 在大部分 Linux 版本系统中,fsck在以下情况下会在系统启动时自动检测文件系统: 1. 文件系统被标记为"dirty” 2.系统启动了一定的次数 3....总结 fsck是一个用来检测,并修复 Linux 文件系统的命令行具。 想要了解更多关于fsck命令的信息,请参考fsck 手册,或者在终端输入man fsck查看 fsck 手册。

    6.2K21
    领券