当前位置: 首页 > news >正文

多线程知识

多线程

进程和线程的区别

  1. 进程包含线程,一个进程里可以有一个线程,也可以有多个线程

2.进程和线程都是用来实现并发编程的,但是线程比进程更加轻量高效

3.同一个进程的线程之间公用同一份资源,省去了申请资源的开销

4.进程与进程之间是具有独立性的,不会相互影响,线程与线程之间有可能相互影响

5.进程是资源分配的基本单位

  线程是调度执行的基本单位

run()和start()有什么区别?

run()方法被称为线程执行体,它的方法体代表了线程需要完成的任务,而start()方法用来启动线程。

说一说sleep()和wait()的区别

1. sleep()是Thread类中的静态方法,而wait()是Object类中的成员方法;

2. sleep()可以在任何地方使用,而wait()只能在同步方法或同步代码块中使用;

3. sleep()不会释放锁,而wait()会释放锁,并需要通过notify()/notifyAll()重新获取锁

Wait() 释放当前锁,让线程进入阻塞,当线程被唤醒时重新获取到锁

说一说Java多线程之间的通信方式

在Java中线程通信主要有以下三种方式:

1. wait()、notify()、notifyAll()

2.await()、signal()、signalAll()

如果线程之间采用Lock来保证线程安全,则可以利用await()、signal()、signalAll()来实现线程通 信。这三个方法都是Condition接口中的方法

死锁发生条件是什么?

死锁只有同时满足以下四个条件才会发生:

互斥条件:互斥条件是指多个线程不能同时使用同一个资源。

请求保持:持有并等待条件是指,当线程 A 已经持有了资源 1,又想申请资源 2,而资源 2 已经被线程 C 持有了,所以线程 A 就会处于等待状态,但是线程 A 在等待资源 2 的同时并不会释放自己已经持有的资源 1。

不可抢占:不可剥夺条件是指,当线程已经持有了资源 ,在自己使用完之前不能被其他线程获取,线程 B 如果也想使用此资源,则只能在线程 A 使用完并释放后才能获取。

循环等待:环路等待条件指的是,在死锁发生的时候,两个线程获取资源的顺序构成了环形链。

什么是死锁?

死锁是一种非常严重的bug,是说多个线程同时被阻塞,线程中的一个或者多个又或者全部都在等待某个资源被释放,造成线程无限期的阻塞,导致程序不能正常终止

死锁的产生原因

线程1先获取锁A再获取锁B, 线程2先获取锁B再获取锁A, 线程1在获取锁B的时候等待线程2释放B,同时线程2在获取锁A的时候等待线程1释放A

其中最容易破坏的就是循环等待这个条件,那么如何破坏循环等待这个条件呢?

多个线程约定好一定的顺序,按照这个顺序加锁释放锁

如何避免死锁?

避免死锁问题就只需要破环其中一个条件就可以,最常见的并且可行的就是使用资源有序分配法,来破环环路等待条件。

那什么是资源有序分配法呢?线程 A 和 线程 B 获取资源的顺序要一样,当线程 A 是先尝试获取资源 A,然后尝试获取资源 B 的时候,线程 B 同样也是先尝试获取资源 A,然后尝试获取资源 B。也就是说,线程 A 和 线程 B 总是以相同的顺序申请自己想要的资源。

java里面的线程和操作系统的线程一样吗?

Java 底层会调用 pthread_create 来创建线程,所以本质上 java 程序创建的线程,就是和操作系统线程是一样的,是 1 对 1 的线程模型。

http://www.dtcms.com/a/265825.html

相关文章:

  • 21、MQ常见问题梳理
  • 映射阿里云OSS(对象存储服务)
  • [创业之路-467]:企业经营层 - 《营销管理》的主要内容、核心思想以及对创业者的启示
  • 【Spring boot】tomcat Jetty Undertow对比,以及应用场景
  • Qt 事件
  • 医科+AI!和鲸支持南京医科大学医学数据挖掘课程实践教学落地
  • CCLinkIE转EtherCAT:食品产线测厚仪的“精准心跳”如何跳动?
  • 重学React(二):添加交互
  • 运维服务部中级服务工程师面试试题
  • 【Spring篇09】:制作自己的spring-boot-starter依赖1
  • 服务器如何配置防火墙规则开放/关闭端口?
  • ROS2---话题重映射
  • 能生成二维码的浏览器插件来了
  • 模型训练复习
  • RabbitMQ 高级特性之发送方确认
  • 12、jvm运行期优化
  • .Net Core 中RabbitMQ基本使用
  • [自然语言处理]计算语言的熵
  • 【Python办公】Excel转CSV文件(可指定拆分行数\可批量或单个)
  • 用C#编写一个读取磁盘第一扇区的程序
  • 架空线路云台监控系统应对线路故障的智能化解决方案
  • 深度学习中的逻辑回归:从原理到Python实现
  • leetcode:1049. 最后一块石头的重量 II[01背包][动态规划]
  • 实际开发如何快速定位和解决死锁?
  • PM2.5和PM10分别是什么
  • 基于MATLAB的风力发电机无人机巡检路径优化研究
  • 最新PDF转markdown软件MonkeyOCR整合包,文档图片解析工具
  • 深度解析:Java内部类与外部类的交互机制
  • odoo-057 pgadmin 登录忘记密码
  • 【实时Linux实战系列】实时以太网与 TSN 基础