随笔分类 - 多线程和并发
摘要:一、异步和多线程有什么区别? 其实,异步是目的,而多线程是实现这个目的的方法。 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。
阅读全文
摘要:线程池的创建方法 总共有 7 种,但总体来说可分为 2 类: 一类是通过 ThreadPoolExecutor 创建的线程池; 另一个类是通过 Executors 创建的线程池。 1. Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程
阅读全文
摘要:一、简单介绍 方式1:Executors.newCachedThreadPool线程池。Executors有7种不同的线程池。 private static final ExecutorService executorService = Executors.newCachedThreadPool(n
阅读全文
摘要:那么怎么获取子线程返回的值呢,我这里总结了三种方式: 主线程等待。 Join方法等待。 实现Callable接口。 如何编程,使得主线程在跑完十个线程之后,再进行后续操作? 可以使用Callable来实现。因为实现线程有两种方式,实现Callable接口或者实现Runnable接口(至于继承Thre
阅读全文
摘要:volatile和synchronized的区别: volatile关键字解决的是变量在多个线程之间的可见性(对于用volatile修饰的变量,JVM虚拟机只是保证从主内存加载到线程工作内存的值是最新的);而sychronized关键字解决的是多个线程之间访问共享资源的同步性。 volatile仅能
阅读全文
摘要:join方法解释: 1、方法join的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。在A线程中调用了B线程的join()方法时, 表示只有当B线程执行完毕时,A线程才能继续执行。 2、方法join(long)是设定等待的时间。实际join()方法中调用的是join(0),当参数是0的时
阅读全文
摘要:死锁是什么? : 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 产生死锁的条件有四个? : 1.互斥条件:所谓互斥就是进程在某一时间内独占资源。
阅读全文
摘要:ThreadLocal: 1、ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问。 2、hreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题 : 1.在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线
阅读全文
摘要:如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 我们来模拟电影院的售票窗口,实现多个窗口同时卖 “功夫熊猫3”这场电影票(多个窗口一起卖这100张票); 同步代码块中的锁对象可以是任意的对
阅读全文
摘要:创建线程的方法有2种: 一:继承thread类, 重写 Thread 类的 run 方法; 二:实现Runnable. Callable接口,实现run方法; 实现Runnable接口,避免了继承Thread类的单继承局限性。覆盖Runnable接口中的run方法,将线程任务代码定义到run方法中。
阅读全文
摘要:并发常见的编程场景,一句话概括就是,需要协调多个线程之间的协作,已保证程序按照自己原本的意愿执行。那么究竟应该如何协调多个线程? 这个问题比较宽泛,一般情况下,我们按照方式的纬度去简单区分,有以下两种方式: 1,第一种是利用JVM的内部机制。 2,第二种是利用JVM外部的机制,比如JDK或者一些类库
阅读全文