synchronized

Java多线程

不羁的心 提交于 2020-02-19 11:41:49
并行和并发有什么区别? 并行:多个处理器或多核处理器同时处理多个任务。 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。 并发和并行 并发 = 两个队列和一台咖啡机。 并行 = 两个队列和两台咖啡机。 线程和进程的区别? 一个程序下至少有一个进程, 一个进程下至少有一个线程, 一个进程下也可以有多个线程来增加程序的执行速度。 守护线程是什么? 守护线程是运行在后台的一种特殊进程。 它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 在 Java 中垃圾回收线程就是特殊的守护线程。 创建线程有哪几种方式? 创建线程有三种方式: 继承 Thread 重写 run 方法; 实现 Runnable 接口; 实现 Callable 接口。 说一下 runnable 和 callable 有什么区别? runnable 没有返回值,callable 可以拿到有返回值, callable 可以看作是 runnable 的补充。 线程有哪些状态? 线程的状态: NEW 尚未启动 RUNNABLE 正在执行中 BLOCKED 阻塞的(被同步锁或者IO锁阻塞) WAITING 永久等待状态 TIMED_WAITING 等待指定的时间重新被唤醒的状态 TERMINATED 执行完成 sleep() 和 wait() 有什么区别?

synchronized和volatile的区别

你说的曾经没有我的故事 提交于 2020-02-18 22:21:37
一、控制区别    首先我们要了解一下是什么是控制层面的区别,这里提到两点:   1.执行控制 目的是 控制代码执行(顺序) 及是否可以并发执行。   2.内存可见控制 线程执行结果在 内存中对其它线程的可见性 。根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存), 操作完成后再把结果从线程本地刷到主存 二、synchronized(执行控制)   1.synchronized会阻止其他线程获取当前的锁。   2.并且 synchronized 会将数据直接刷到主存,保证数据的可见性,同时也使得这个锁线程的所有操作都happends-before于之后获得这个锁的线程的操作。 三、volatile(内存可见性控制)   1.直接将数据刷到主存,保证内存可见性。   2.禁止指令重排 ("为了提高性能,编译器和处理器会对指令做重排序")   3.具有可见性、有序性,不具备原子性。   注“ 内存屏障指令保证了所有CPU操作结果都会直接刷到主存中。 将刷出所有在Barrier之前写入 cache 的数据,因此,任何CPU上的线程都能读取到这些数据的最新版本。 四、两者之间的区别   1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量

synchronized实现共同变量访问时的并发安全

丶灬走出姿态 提交于 2020-02-18 15:21:46
1)不安全的代码 package com.atguigu.test; public class Test { public static int count = 0; public static void add() { count++; } public static void sub() { count--; } public static void main(String[] args) throws Exception { new Thread(() -> { for(int i = 0; i < 100000; i++){ add(); } }).start(); new Thread(() -> { for(int i = 0; i < 100000; i++){ sub(); } }).start(); Thread.sleep(2000); /** * -2879 * 其实每次访问,发现打印的这个值都不太一样 */ System.out.println(count); } } 2)并发安全的代码 package com.atguigu.test; public class TestSync { public static int count = 0; public synchronized static void add() { count++; } public

阿里P7Java最全面试296题:阿里天猫、蚂蚁金服含答案文档解析

依然范特西╮ 提交于 2020-02-18 04:46:57
【阿里天猫、蚂蚁、钉钉面试专题题目加答案】 不会做别着急:文末有答案以及视频讲解,架构师资料 1. junit用法,before,beforeClass,after, afterClass的执行顺序 2. 分布式锁 3. nginx的请求转发算法,如何配置根据权重转发 4. 用hashmap实现redis有什么问题(死锁,死循环,可用ConcurrentHashmap) 5. 线程的状态 5. 线程的阻塞的方式 6. sleep和wait的区别 7. hashmap的底层实现 8. 一万个人抢100个红包,如何实现(不用队列),如何保证2个人不能抢到同一个红包,可用分布式锁 9. java内存模型,垃圾回收机制,不可达算法 10. 两个Integer的引用对象传给一个swap方法在方法内部交换引用,返回后,两个引用的值是否会发现变化 11. aop的底层实现,动态代理是如何动态,假如有100个对象,如何动态的为这100个对象代理 12. 是否用过maven install。 maven test。git(make install是安装本地jar包) 13. tomcat的各种配置,如何配置docBase 14. spring的bean配置的几种方式 15. web.xml的配置 16. spring的监听器。 17. zookeeper的实现机制,有缓存,如何存储注册服务的 18.

201521123044 《Java程序设计》第11周学习总结

狂风中的少年 提交于 2020-02-17 19:15:54
1. 本章学习总结 2. 书面作业 本次PTA作业题集 多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步访问(请出现相关代码)? 题集4-4和4-5使用到的Lock对象和Condition对象实现互斥同步访问 //关键代码: public void deposit(int money) {// synchronized lock.lock(); try { balance += money; plus.signalAll(); } finally { lock.unlock(); } } public void withdraw(int money){ lock.lock(); try{ try{ while(this.getBalance()<=0) condition.await(); condition.signal(); }catch(Exception e){ System.out.println(e); } this.balance=this.getBalance()-money; if(balance<0) throw new IllegalStateException(balance+""); }finally{ lock.unlock(); }

Java锁基本使用及AQS

独自空忆成欢 提交于 2020-02-17 18:35:50
synchronized可以解决Java的并发问题,为什么jdk1.5之后还要推出Java并发包并提供多种锁呢? 1、synchronized与Lock的区别 虽然synchronized和Lock都能够实现同步功能,但是两者之间还是有一定区别的。 synchronized隐式获取锁是释放锁,Lock需显示的获取和释放锁,具有更高的灵活性,但是如果不释放锁,容易造成死锁问题; synchronized如果获取不到锁,会阻塞线程,但是Lock提供非阻塞api,可以立即返回结果; synchronized是java提供的同步关键字,但是Lock接口下面的都是实现类,是Java类; synchronized不可中断,lock.lockInterruptibly()可以响应中断; synchronized是非公平锁,但是Lock可以提供公平及非公平两种; 2、Lock基本使用 Java中对锁也提供了不同的实现类,使用的最多的有ReentrantLock和ReentrantReadWriteLock,下面分别介绍重入锁和读写锁。 2.1、ReentrantLock 重入锁ReentrantLock,顾名思义,就是支持重新进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。 使用ReentrantLock进行n次lock之后

java锁(转)

感情迁移 提交于 2020-02-17 17:13:23
Java中锁分类 锁的分类 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁(java.util.concurrent包下的几乎都是利用锁) CAS 它是解决轻微冲突的多线程场景下使用锁造成性能损耗的 一种机制 。先是 比较 ,如果不符合预期,则 重试 。它有三个操作因素: 内存位置 , 预期原值 与 新值 。如果内存位置的值与预期原值相等,则处理器将该位置值更新为新值,如果不相等,则获取当前值,然后进行不断的轮询操作直到成果达到某个阙值退出。 AQS AbstractQueuedSynchronizer 简称AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。JDK1.5中提供的 java.util.concurrent 包中的大多数的同步器 (Synchronizer) 如 Lock, Semaphore, Latch, Barrier 等,它们都是基于 java.util.concurrent.locks.AbstractQueuedSynchronizer 这个类的框架实现的。 乐观锁/悲观锁 乐观锁 :乐观锁是一种乐观思想,认为 读多写少 ,遇到并发的可能性低,每次拿数据时候并 不会上锁 ,因为认为不会被别人修改。但是更新的时候会判断有没有人会更新这条数据,采取写的时候先 读取版本号然后加锁

如何线程安全的使用HashMap

雨燕双飞 提交于 2020-02-17 14:20:13
HashMap: 线程不安全,链表结构,效率高; Hashtable : 线程安全,但效率低,因为是Hashtable是使用synchronized的,所有线程竞争同一把锁; Synchronized Map: 线程安全,但效率低,一次性锁住整张表来保证线程安全,所以每次只能有一个线程来访问map。 ConcurrentHashMap:线程安全而且效率高,因为它包含一个segment数组,将数据分段存储,给每一段数据配一把锁。           在理想状态下,ConcurrentHashMap 可支持16个线程执行并发写操作,及任意数量线程的读操作。 如何线程安全的使用HashMap : 以下三种方式: Hashtable ConcurrentHashMap Synchronized Map    来源: https://www.cnblogs.com/lgg20/p/12321427.html

Threadsafe vs Synchronized

余生颓废 提交于 2020-02-17 09:11:08
问题 I'm new to java. I'm little bit confused between Threadsafe and synchronized. Thread safe means that a method or class instance can be used by multiple threads at the same time without any problems occurring. Where as Synchronized means only one thread can operate at single time. So how they are related to each other? 回答1: The definition of thread safety given in Java Concurrency in Practice is: A class is thread-safe if it behaves correctly when accessed from multiple threads, regardless of

2020程序员面试必备!58道精选面试题

冷暖自知 提交于 2020-02-16 23:37:44
借鉴大佬的博客!哈哈 @阿尔法789 原文链接:https://blog.csdn.net/Aerfa789/article/details/104319956 面试题目: 1-10题: 1、java中==和equals和hashCode的区别 2、int与integer的区别 3、String、StringBuffer、StringBuilder区别 4、什么是内部类?内部类的作用 5、进程和线程的区别 6、final,finally,finalize的区别 7、Serializable 和Parcelable 的区别 8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? 9、成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用 10、string 转换成 integer的方式及原理 11、哪些情况下的对象会被垃圾回收机制处理掉? 12、静态代理和动态代理的区别,什么场景使用? 14、Java中实现多态的机制是什么? 16、说说你对Java反射的理解 17、说说你对Java注解的理解 18、Java中String的了解 19、String为什么要设计成不可变的? 20、Object类的equal和hashCode方法重写,为什么? 21、List,Set,Map的区别 26、ArrayMap和HashMap的对比 29