
juc
文章平均质量分 59
全栈_小关
走不完的路
展开
-
juc并发08公平锁和非公平锁
可重入锁中,默认为NonfairSync()非公平锁,给一个boolean参数来判断构造的是非公平锁还是公平锁,如下图 1.非公平锁 可能会造成线程饿死的情况,也就是一个资源都得不到 但是它的执行效率高 2.公平锁 雨露均沾 也就是不会出现线程饿死的情况 但是执行效率没有非公平锁效率高,因为他会去判断是否所有线程都得到了资源 3.公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。 优点:所有的线程都能得到资源,不会饿死在队列中。 缺点:吞吐量会下降很多原创 2021-09-08 17:05:08 · 247 阅读 · 0 评论 -
juc并发07锁的八种情况
8种锁: 1.标准访问,先打印短信还是邮件 2.停留4秒在短信方法内,先打印短信还是邮件 3.新增普通的hello方法,先是打短信还是hello 4.现在有两部手机,先打印短信还是邮件 5.两个静态同步方法,1部手机,先打印短信还是邮件 6.两个静态同步方法,2部手机,先打印短信还是邮件 7.1个静态同步方法,1个普通同步方法,1部手机,先打印短信还是邮件 8.1个静态同步方法,1个普通同步方法,2部手机,先打印短信还是邮件 一、标准访问,先打印短信还是邮件 资源类 创建线程操作方法 结果,因为当前原创 2021-09-08 16:49:43 · 174 阅读 · 0 评论 -
juc并发06HashMap和HashSet线程不安全以及解决方案
1.线程不安全演示代码 HashMap<String, String> map = new HashMap<>(); for (int i = 0; i < 10; i++) { String key = String.valueOf(i); new Thread(() -> { map.put(key,UUID.randomUUID().toString(原创 2021-08-27 09:32:22 · 508 阅读 · 0 评论 -
juc并发05 线程通信-异常演示(arraylist线程不安全)(写时复制技术)
1.为什么arrarlist线程不安全? 我们点开arraylist的add方法可以看见,add方法上是没有synchronized方法的(当然也没有添加lock),因此arraylist是线程不安全的 由于arratlist底层是一个数组,在我们新增一个元素时,后进行数组扩容,也就会调用源码中的grow()函数进行数组的扩容,但在多线程的情况下,会出现同时扩容同一个数量的数组,就会抛出ConcurrentModificationException异常问题,也就是线程不安全。 2.解决arraylist线原创 2021-08-23 16:06:10 · 131 阅读 · 0 评论 -
juc并发04 线程间通信
1.实现线程通信例子 第一步创建资源类,在资源类中创属性和操作方法 第二步在资源类操作方法 (1)判断 (2)干活 (3)通知 第三步创建多个线程调用资源类的操作方法 例子 有两个线程,实现对一个初始值是0的变量,其中一个线程实现+1,另外一个线程-1,让这个变量一直在 0 ,1中进行徘徊 在+1的操作中判断变量是否是0如果不是调用object中的wait方法让其进行等待,然后让另外一个线程进行-1之后使用object.notify方法进行+1线程的唤醒操作 例子代码 //第一步创建资源类,定义属性和操原创 2021-08-23 15:47:24 · 95 阅读 · 0 评论 -
juc并发03 Lock接口
1.官方文档简介 2.可重入锁 广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。 实现可重入锁代码: public class ReentrantTest implements Runnable { public synchronized void get() { System.out.println(Thread.currentThread().getName());原创 2021-08-23 15:39:33 · 148 阅读 · 0 评论 -
juc学习02 synchronized和synchronized实现案例
1.synchronized是java中的关键字,是一种同步锁,他修饰的对象有以下几种 修饰一个代码块,被修饰的代码块被称为同步语句,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象 修饰一个方法,被修饰的方法称为同步方法,其作用范围是整个方法,作用的对象是调用这个方法的对象 虽然可以使用synchronized来定义方法,但synchronized并不属于方法定义的一部分,因此,synchronized关键字不能被继承。如果在父类中的某个方法使用了synchronized关键字,而原创 2021-08-23 11:41:46 · 143 阅读 · 0 评论 -
juc并发学习01 线程和进程
1.什么是juc? juc就是java.util.concurrent工具包的简称,这是处理线程的工具包,jdk1.5开始出现 2.什么是进程和线程 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,在当代面向线程设计的计算机机构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,程序是指令、数据及其组织形式的描述,进程原创 2021-08-23 11:28:12 · 111 阅读 · 0 评论