
多线程
多线程
长不大的大灰狼
这个作者很懒,什么都没留下…
展开
-
Linux下进程间的通信方式
文章目录Linux下进程间的通信方式1 管道1)匿名管道2)命名管道(FIFO)2 消息队列3 共享内存4 信号量(1)互斥信号量(2)同步信号量5 信号(1)硬件来源(2)软件来源6 Socket(1) 针对 TCP 协议通信的 socket 编程模型(2)针对 UDP 协议通信的 socket 编程模型(3)针对本地进程间通信的 socket 编程模型Linux下进程间的通信方式每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。转载 2020-08-10 11:46:27 · 554 阅读 · 1 评论 -
Java锁的升级与对比
Java锁的升级与对比在Java SE 1.6中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。注:锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效率。1 偏向锁大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。 当一个线程访问同步块并获取锁时,会在 对象头 和栈帧中的 锁记录 里存原创 2020-08-23 17:07:34 · 245 阅读 · 0 评论 -
Condition接口对标 wait—notify等待通知机制
文章目录1 Condition接口2 Condition的实现:3 Condition与 wait—notify的区别与联系:1 Condition接口任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、wait(long timeout)、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现原创 2020-08-24 17:43:23 · 547 阅读 · 0 评论 -
Lock接口及队列同步器AQS
1 Lock接口Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时 需要显式地获取和释放锁 。虽然缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。Lock接口的实现类:ReentrantLockReentrantReadWriteLock.Re原创 2020-08-24 09:25:25 · 209 阅读 · 0 评论 -
Java中线程之间的通信方式
线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作。同步的话,仅仅传递的是控制信息,就是我什么时候运行结束,你什么时候可以来。对于线程间通信来说,线程间同步可以归纳为线程间通信的一个子集,对于线程通信指的是两个线程之间可以交换一些实时的数据信息,而线程同步只交换一些控制信息。1 synchronizedpackage Communication;class Target{ synchronized pu原创 2020-08-19 09:47:01 · 2502 阅读 · 0 评论 -
线程同步的方法
文章目录线程同步的方法1 synchronized修饰方法2 synchronized修饰代码块3 使用特殊域变量(volatile)实现线程同步4 使用重入锁ReentrantLock实现线程同步5 使用原子变量util.concurrent.atomic实现线程同步线程同步的方法1 synchronized修饰方法由于Java的每个对象都有一个内置锁,在调用synchronized修饰的方法前,需要获得内置锁,否则就处于阻塞状态。public synchronized void save(){原创 2020-08-17 21:09:34 · 168 阅读 · 0 评论 -
常见锁策略、锁优化及死锁
Ⅰ常见的锁策略(1)乐观锁和悲观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测(可以使用版本号机制和CAS算法实现检测),如果发现并发冲突,则返回用户错误的信息。悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。悲观锁的问题:总是需要竞争锁,进而导致发生线程切换,挂起其他线程;所以性能不高。乐观锁的问题:并不总是能处理所有问题,所以会原创 2020-05-31 18:03:23 · 1249 阅读 · 0 评论 -
JavaWeb笔记09:线程池
线程池(thread pool)没有线程池的情况下:import java.util.Scanner;public class NoThreadPool { static class Deliver extends Thread { String task; public Deliver(String task) { thi...原创 2020-03-20 17:23:35 · 281 阅读 · 0 评论 -
JavaWeb笔记08:wait、notify、堵塞队列、定时器
wait、notify、堵塞队列、定时器1 wait、notifywait 和 notify都属于Object方法(任何对象都可以调用)作用:Object o=new Object(); 当A线程调用o.wait()之后,A线程会放弃CPU,从就绪队列移到o指向对象的等待集(wait sets)中,并且失去抢夺CPU的资格(状态从Runnable切换到Waiting)当B线程调用o.no...原创 2020-03-17 17:19:42 · 300 阅读 · 0 评论 -
JavaWeb笔记07:Java中的同步机制(synchronized,volatile)和单例模式
volatile机制和单例模式A线程抢到锁,B线程抢锁失败后,可能要过很久,B线程才能再次获得执行的机会。第一个机制synchronized原子性:保证lock-unlock之间的这段代码,不会被其他互斥线程中断(如果不存在线程互斥,则synchronized不起作用,即不能保证这段代码不被中断)。适度保证可见性(互斥线程之间)synchronized释放锁的时候:强制把当...原创 2020-03-16 23:09:53 · 318 阅读 · 0 评论 -
JavaWeb笔记06:Java中的加锁机制(同步机制)——synchronized
synchronized用法:1 作为方法修饰符,写在定义的方法之前。1)同步方法:synchronized修饰普通方法,锁的是this引用指向的对象synchronized void method(){ }2)同步静态方法:synchronized修饰静态方法,锁的是 类名.class引用指向的对象(class本身也有一个对象,可以通过类名.class引用找到这个对象(反射用法)...原创 2020-03-16 17:56:31 · 552 阅读 · 0 评论 -
JavaWeb笔记05:线程不安全的原因(原子性,可见性,重排序)
线程安全线程会可能出现不安全的的两个必要条件:多线程之间的变量(资源)是共享的。多线程之间对共享变量(资源)存在修改操作。共享资源和私有资源:1.形参、局部变量都存放在栈帧里,它们是线程之间私有的。2.属性存放在对象里,对象(不包括反射对象)存放在堆中,即属性是线程之间共享的。3.静态属性,静态属性在类中,类在方法区中,静态属性也是线程之间共享的。注意:当多线程修改上述变量(...原创 2020-03-10 11:39:20 · 263 阅读 · 0 评论 -
JavaWeb笔记04:中断/线程状态转换
设置普通状态位让线程停止:public class普通状态位的方式通知停止 { private static boolean condition = true; static class 写作业 implements Runnable { @Override public void run() { while (cond...原创 2020-03-07 11:43:14 · 259 阅读 · 0 评论 -
JavaWeb笔记03:多线程的创建、构造方法和属性
多线程的使用t.start 将线程放到就绪队列中,当线程被分配到CPU资源时,才会运行起来。该线程被调度下来的5中情况:1:被高优先级抢占2:执行结束3:等待IO4:主动放弃5:时间片耗尽了public class Main { private static class A extends Thread { @Override public...原创 2020-03-05 12:40:21 · 280 阅读 · 0 评论 -
JavaWeb笔记02:多线程引入
进程:操作系统资源分配的最小单位线程:操作系统调度的最小单位多进程理解:一条流水线代表一个进程,要想提高效率,使用多进程,即增加多个流水线。多线程理解:在一条流水线中增加多个工人,进而提高效率,但是一条流水线上的资源是有限的,即使用多线程也是有限制的。1 使用多线程计算多个累加和public class web { static final int COUNT =10; ...原创 2020-03-02 11:33:29 · 218 阅读 · 0 评论 -
JabaWeb笔记1:操作系统、进程信息一览
任何计算机都由四部分组成:(1)输入设备(Input)(2)存储器(Storage)(3)处理器(Processor)(4)输出设备(Output)其中:硬盘、网卡兼备输入和输出功能控制器里面包含了:程序计数器(Program Counter, PC)CPU只能对内存进行读写,不能访问外设。外设要输入输出数据,也只能在内存中进行读写。**程序:**一份指导CPU如何工作的...原创 2020-03-02 10:59:36 · 301 阅读 · 0 评论