![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
操作系统和多线程部分
文章平均质量分 78
主要总结一些平时学到的操作系统和多线程相关知识
奇幻岛
这个作者很懒,什么都没留下…
展开
-
菜鸡秋招第一次面试以后……应该好好研究一下索引、事务、死锁了
索引1、什么是索引?为什么要有索引?简单来说,索引就像一个目录;比如你想在图书馆借一本莫言的小说,一楼存的数学类,二楼医学类,三楼文学类。在三楼一排存的徐志摩的,二排存的莫言的,三排存的林徽因的。索引就相当于引导,有人告诉你三楼二排存的莫言的,你就不用从一楼一本一本的去往上找,这就大大增加了查找速度。来官方一点:索引能快速找出在某一列中有一特定值的行。不使用索引,mysql必须从第一条记录开始查找,直到找到相关的行。如果表中查询的列有一个索引,mysql能快速到达某个位置去搜索数据文件,而不必查看所有原创 2020-08-10 16:33:41 · 805 阅读 · 0 评论 -
【线程池下篇】IO密集型 VS CPU密集型
先来思考一个问题,线程数量是不是越多越好,我们都知道线程的出现是为了帮忙干活,就像生活中你找人帮你干活你得给人家开工钱,那肯定不是越多越好,计算机中,线程的创建同样需要本钱;不是越多越好,那应该怎么设计呢?根据需求来,看你的需求是怎样的;第一种情况:cpu密集型如果你的程序是以计算为主,多线程在运行的时候,可以充分利用CPU,假设你有五个核心cpu,当你有五个线程时,此时一人一个,资源得到了最大效率的利用,如果你有五个CPU,10个线程,这样,运行线程的创建过程和运行的切换过程都需要浪费资源,就得不偿原创 2020-07-14 11:58:57 · 1555 阅读 · 0 评论 -
【线程池上篇】4种常用线程池介绍
一、线程池介绍概念+使用原因:线程池就是提前创建好一些线程放在一起的集合,线程池的工作模式时拿到任务后在自己的池子里找看谁闲着,这个活就让谁去干,多线程模式下,系统需要不断地启动和关闭新线程,这个过程不但消耗资源而在存在线程间过渡的不安全性。ExecuorService 是Java提供的用于管理线程池的类,主要作用是控制线程数量和重用线程线程池的构成一个线程池包括以下四个基本组成部分:1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;2、工原创 2020-07-14 11:30:50 · 1041 阅读 · 0 评论 -
聊聊进程和线程以及进程间通信的方式
得到的原创 2020-07-08 15:24:24 · 635 阅读 · 0 评论 -
多线程初阶篇
多线程的创建方式1、通过继承Thread类创建线程类①定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体。②创建Thread子类的实例,也就是创建了线程对象③启动线程,即调用线程的start()方法class MyThread extends Thread { @Override public void run() { System.out.println("这里是线程运行的代码");原创 2020-07-08 15:22:14 · 279 阅读 · 0 评论 -
面试-sleep()和wait()的区别
其实理论上 wait 和 sleep 完全是没有可比性的,因为一个是用于线程之间的通信的,一个是让线程阻塞一段时间,唯一的相同点就是都可以让线程放弃执行一段时间。用生活中的例子说的话就是婚礼时会吃糖,和家里自己吃糖之间有差别。说白了放弃线程执行只是 wait 的一小段现象。当然为了面试的目的,我们还是总结下:1、wait 之前需要请求锁,而wait执行时会先释放锁,等被唤醒时再重新请求锁。这个...原创 2020-03-25 10:40:39 · 245 阅读 · 0 评论 -
JAVA多线程之阻塞队列
什么是阻塞队列?多线程环境中,通过队列可以很容易实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利地实现两者之间的数据共享。阻塞队列相当于一个缓冲区,生产者和消费者可以经过它来通信。那到底是怎样进行阻塞的?阻塞添加:当队列满的时候,队列会阻塞插入元素的线程,直至队列不满阻塞移除:在队列为空时,队列会阻塞移除元素的线程,直至队列不满队列的常用方法抛出异常:Add:...原创 2020-03-25 10:23:21 · 319 阅读 · 0 评论 -
多线程保证安全机制volatile
先来了解一下原子性long a=10lint 是按32位处理,long是按64位,高32位为0,低32位为10被volatile修饰的变量具备可见性:意思就是说,在多线程环境下,某个共享变量如果被其中一个线程给修改了,其他线程能够立即知道这个共享变量已经被修改了,当其他线程要读取这个变量的时候,最终会去内存中读取,而不是从自己的工作空间中读取。volatile long a;a=10L/...原创 2020-03-24 19:58:23 · 214 阅读 · 0 评论 -
多线程保证安全的机制Synchronized
Synchronized是java的内置锁,每个JAVA对象都可以用作一个实现同步的锁,线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁加锁:实现两个线程之间互斥1、作为方法的修饰符,可以写在定义的方法之前:这个方法在同一时刻只能被一个线程访问,从而保证了多线程访问的安全性。然而,当一个方法体规模非常大时,把该方法声明为synchronized会大大影响程序的执...原创 2020-03-24 19:38:14 · 168 阅读 · 0 评论 -
面试重点之线程安全(概念和因素)
概念:多线程程序的运行结果可以保证100%正确性,才算安全1、多线程之间有共享资源2、多线程之间有针对共享资源的修改变量有两种类型,一种是基本数据类型,一种是引用数据类型(变量的类型无法决定该变量是否是线程之间共享的)变量的形态:形态才是决定变量存放位置以及是否是线程共享的主要因素形参和局部变量存放在栈帧里,它们是线程之间私有的属性存放在对象里,对象存放在堆中,所以是线程之间共享的静...原创 2020-03-23 18:38:09 · 226 阅读 · 0 评论 -
线程的常用方法
run()和start()这是多线程最常用的方法了,把需要并行处理的代码放在run()中,run方法必须是public权限,返回值为void。start()方法启动线程自动调用run()方法public class Case3 { private static class A extends Thread{ @Override public void r...原创 2020-03-22 21:07:37 · 186 阅读 · 0 评论 -
初识多线程 (创建,属性)先扫个盲
先来两句经典语录进程是资源分配的最小单位线程是资源调度的最小单位什么意思呢?比如说银行来了很多顾客,忙不过来了,这时行长张三叫来了李四王五,这时李四王五张三就是线程,人是张三叫的,他就是主线程,来的那一个个顾客就是一个个进程。进程和线程的最大区别就是线程间是数据共享的。什么时候用线程?1、有可能提升速度的时候(原理:多一个调度单位,就多一个机会抢到cpu)2、线程有极限,如果操作系统中...原创 2020-03-22 20:18:20 · 191 阅读 · 0 评论 -
简单易懂的单例模式
什么是单例模式?单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式的特点?①、单例类只能有一个实例②、单例类必须自己创建自己的唯一实例③、单例类必须给所有其他对象提供这一实例单例模式的分类(饿汉和懒汉):饿汉模式饿汉模式:主动去找食物,一开始就吃掉。class Singleton { private static Singleton ins...原创 2019-11-23 12:49:14 · 183 阅读 · 0 评论 -
Java线程的六种状态
六种状态及其转换图初始(new)新创建好一个线程对象,但还没有调用start()方法时就处于初始状态运行(RUNNABLE)(就绪(ready)和运行中(running))哪些情况下会进入就绪?1、调用线程的start()方法,此线程进入就绪状态。2、当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入就绪状态。3、当前线...原创 2019-11-22 12:07:19 · 408 阅读 · 0 评论 -
线程的两种常用创建方式
方法一:继承Thread类创建线程*(1)d定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体。(2)创建Thread子类的实例,也就是创建了线程对象(3)启动线程,即调用线程的start()方法具体代码如下class MyThread extends Thread { @Override pu...原创 2019-11-22 11:05:52 · 2366 阅读 · 0 评论