![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础
w362501266
这个作者很懒,什么都没留下…
展开
-
synchronized与Lock的区别
1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类; 2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁; 3.synchronized会自动释放锁(a线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁; 4.用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2.原创 2020-06-17 17:30:19 · 182 阅读 · 0 评论 -
Atomic、volatile、ThreadLocal
volatile:轻量级的synchronized,高并发下保证变量的可见性。 可见性:在一个线程的工作内存中修改了该变量的值,该变量的值能立即回显到主内存中,从而保证所有线程看到这个变量的值是一致的。 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做 Atomic正是采用了CAS算法,所以可以在多线程环境下安全地操作对象 ThreadLocal提供线程内的局部变量。每个线程都自己管理自己的局部变量,互不影响。 ...原创 2020-06-04 20:26:59 · 163 阅读 · 0 评论 -
守护线程和非守护线程
基本概念 守护线程:和主线程一起结束的线程,叫守护线程。 非守护线程:主线程的结束不影响线程的执行的线程,也叫用户线程。 示例代码 非守护线程: public class MyThread extends Thread{ @Override public void run() { //重写run方法 for(int i=1;i<11;i++){ try { Thread.sleep转载 2020-06-04 16:33:55 · 447 阅读 · 0 评论 -
并发、并行、串行
并发是同时处理(dealing)很多的事情 并行是同时做(doing)很多的事情 并发是在同一实体上的多个事件 并行是在不同实体上的多个事件 串行是多个任务,执行时一个执行完再执行另一个。比喻:吃完饭再看视频。 并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞(一般是通过时间片轮转),所以在宏观上看多个几乎同时到达的请求同时在被处理。如果是同一时刻到达的请求也会根据优先级的不同,而先后进入队列排队等候执行。 .原创 2020-06-04 16:09:03 · 231 阅读 · 0 评论