线程/并发
CSU_Dennis
博主2019年6月毕业于中南大学计算机院
展开
-
线程实现的三种方式,Runnable VS Thread VS Callable
线程3种实现方式比较1、Runnable方式可以避免Thread方式由于Java单继承特性带来的缺陷,可以实现多个接口,但是只能继承一个父类2、Runnable可以被多个线程共享,适合于多个线程处理同一资源的情况 与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。public class MyCallable impl...原创 2018-07-02 16:36:55 · 456 阅读 · 0 评论 -
sleep(),wait(),join(),yield()方法总结
1.sleep()方法在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。sleep()使当前线程进入阻塞状态,在指定时间内不会执行。2.wait()方法在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出Illega...原创 2019-07-11 09:28:49 · 322 阅读 · 0 评论 -
Synchronized常见面试问题
1、锁对象不能为空指定一个锁对象,必须是一个实例对象,被new过或其他方法创建好的,不是空对象2、作用域不宜过大synchronized所包裹的范围如果大,会影响程序执行的速度,因为都是串行运行了,并没有达到并发编程的目的3、避免死锁public void run() { synchronized (instance1) { System....原创 2019-04-26 20:27:40 · 2453 阅读 · 0 评论 -
多线程访问同步方法的7种情况(面试常考)
1、两个线程同时访问一个对象的同步方法2、两个线程访问的是两个对象的同步方法3、两个线程访问的是synchronized的静态方法4、同时访问同步方法(synchronized修饰)和非同步方法(没有被synchronized修饰)5、访问同一个对象的不同的普通同步方法(非静态方法)6、同时访问静态synchronized和非静态synchronized方法7、方法抛异常后...原创 2019-04-26 11:03:29 · 597 阅读 · 0 评论 -
Synchronized作用、用法、性质、原理、缺陷
Synchronized作用:能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。Synchronized两个用法:1、对象锁:包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对象)。同步代码块形式:public class SynchronizedObjectCodeBlock implements Runnabl...原创 2019-04-26 10:31:23 · 346 阅读 · 0 评论 -
什么是线程池?线程池创建的方式?让你设计一个动态大小的线程池,如何设计,应该有哪些方法?
线程池 线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。Java通过 Executors 提供四种线程池,分别为: newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFix...原创 2018-08-25 11:51:47 · 1046 阅读 · 0 评论 -
volatile作用,可见性原理,与synchronized区别
volatile 关键字的作用 保证内存的可见性 防止指令重排 注意:volatile 并不保证原子性可见性原理 volatile 保证可见性的原理是在每次访问变量时都会进行一次刷新,因此每次访问都是主内存中最新的版本。所以 volatile 关键字的作用之一就是保证变量修改的实时可见性。volatile 和 synchronized区别 1、 volatile 轻量级,只能修饰...原创 2018-08-25 11:48:51 · 1056 阅读 · 0 评论 -
乐观锁和悲观锁概念
为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。 典型的冲突有: 丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。 脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取。例如:用户A,B看到的值都是6,用户B把值...原创 2018-08-25 11:05:17 · 346 阅读 · 0 评论 -
CAS概念
CAS是英文单词Compare and Swap的缩写,翻译过来就是比较并替换。CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。...原创 2018-08-25 11:03:39 · 378 阅读 · 0 评论 -
进程和线程的区别
线程:程序运行过程中,能够执行 程序代码的一个执行单元。4种状态:运行、就绪、挂起、结束。进程:一段正在执行的程序,程序+数据和进程控制块。4种特征:动态性、并发性、独立性、异步性。区别:1、 包含关系:一个程序至少有一个进程,一个进程至少有一个线程.2、 内存共享:进程在执行过程中拥有独立的内存单元(一个进程崩溃后,在保护模式下不会对其它进程产生影 响;而多个线程共享进程提供的内...原创 2017-06-17 09:49:14 · 273 阅读 · 0 评论 -
同步和异步区别
首先举个生活中的例子加深印象:同步:你喊我吃饭,如果我听到了,我就和你去吃饭;如果我没有听到,你就不停的喊,直到我告诉你我听到了,我们才一起去吃饭异步:你喊我吃饭,然后自己去吃饭,我得到消息后可能立即去吃饭,也可能等到下班后去吃饭 同步:多个线程访问同一个资源时,它们需要以某种顺序来确保资源在某一时刻只能被一个线程使用,同步能保证资源的安全,比如火车站卖票 实现同步的方式...原创 2017-06-17 10:28:29 · 397 阅读 · 0 评论 -
start和run方法区别
系统调用start()方法启动一个线程,该线程处于就绪状态,而非运行状态,也就意味着这个线程可以被JVM来调度执行,在调度过程中,JVM通过线程类的run()方法来完成实际的操作,当run()方法结束后就会终止;如果直接调用run()方法,这就相当于一个普通函数的调用,是同步的,无法达到多线程的目的,start()方法能后异步的调用run()方法,真正达到多线程的目的...原创 2017-06-17 10:49:23 · 821 阅读 · 0 评论 -
线程终止的方法
1.异常法(使用退出标志,使线程正常退出) public class MyThread extends Thread{ public void run(){ super.run(); try { for (int i = 0; i < 5000000; i++) { if(this...原创 2017-06-17 11:01:40 · 340 阅读 · 0 评论 -
如何实现高并发?
思路:1、用队列削峰(广播机制、分组消费)2、并发分布式锁、单点处理共享3、数据实时性的取舍4、缓存5、服务降级原创 2018-06-24 11:20:46 · 1840 阅读 · 0 评论 -
sleep() 和 wait() 有什么区别?
sleep是Thread类的方法,线程暂停执行指定时间,不释放对象锁wait是Object类的方法,线程放弃对象锁,notify或notifyall方法唤醒public class Test{ public static void main(String[] args) { new Thread(new Thread1()).start(); try { Thread.s...原创 2017-04-18 10:44:48 · 437 阅读 · 0 评论