多线程
文章平均质量分 59
四大天王之一
仰天大笑出门去,我辈岂是蓬蒿人(我的资源中有什么不懂的加QQ:779557608并备注CSDN,我尽力解答)
展开
-
多线程高级讲解二: jdk1.5并发包提供的 CountDownLatch 和 CyclicBarrier类的await方法(计数器)
CountDownLatch其实特别简单,与join的作用差不多。是jdk1.5的并发包提供的。比如现在有3个线程,t1、t2、t3, 我现在希望先执行t1,t3,最后才执行t2.。这时候可以给CountDownLatch设置一个值,比如设置为2,当t1 和 t3执行完毕后,调用CountDownLatch的一个方法,将设置的值2,每次调用,都减1。 当不为0的时候,执行到CountDownLatch的await方法,下面的代码就不执行,然后继续去执行其他线程的方法。直到CountDownL...原创 2020-07-07 23:19:10 · 269 阅读 · 1 评论 -
多线程高级讲解一:常见的线程安全的类有哪些 ?
Vector 与 ArrayList的区别:他们的原理都是通过数组实现的,增删慢,查询快。Vector是线程安全的,ArrayList线程不安全,效率高。我们去看源码:Vector 的add方法是加了synchronized关键字,所以他是一个同步方法,线程是安全的,效率低,工作中即使要使用线程安全的List集合,也不使用Vector,而是用Collections工具类中的 Collections.synchronizedList(arrayList);他可以将线程不安全的Arra...原创 2020-07-07 21:58:45 · 1656 阅读 · 0 评论 -
多线程基础讲解十一: ThreadLocal
ThreadLocal其实特别简单:就是为每一个线程创建一个局部变量。如果不用ThreadLocal的效果:public class Order { public int count = 0; public Integer getNumber() { return count++; }}public class NewThread extends Thread { private Order order; pu...原创 2020-07-07 17:22:58 · 101 阅读 · 0 评论 -
多线程基础讲解十: 多线程的Lock锁,多线程同步、多线程并发的概念
同步 和 并发 : 对于程序员来说,他们其实是有两个意思的,一个是多线程层面,一个是网站请求服务器层面。对于网站的请求层面来说:同步:就是代码一步一步的有顺序的向下执行。并发:就是多个请求同时访问一台服务器。对于多线程层面来说:同步: 就是加锁,为了保证数据的原子性。也就是保证数据的正确性。并发:就是多个线程,操作同一个共享的资源。所以:他们之前是有区别的,不是一个概念。接下来就说说Lock锁,他是jdk1.5提供并发包的一个工具。以前没有Lock锁的...原创 2020-07-07 12:11:59 · 397 阅读 · 0 评论 -
多线程基础讲解九: 多线程之间的通讯 (wait、notify)
我在写这个例子的时候,也出了很多问题。今天头很痛,好长时间没弄出来,心情异常的烦躁。先说下概念吧:多线程之前通讯,不要想复杂了。他就是一个生产者 与 消费者的概念。比如说一个生活中的例子(这是基于我的理解自己想的一个例子):在银行办业务,需要排队。 业务员属于一个线程,办业务的人属于一个线程。那么在程序里就相当于:业务员刚坐下开始上班,就处于一个wait状态(等待),然后业务员就对外面的人立个牌子,空闲中。这就相当于notify,就是告诉外面的人,我这里可以办业务。 然后..原创 2020-07-06 23:38:40 · 208 阅读 · 0 评论 -
多线程基础讲解八: JDK1.5提供的并发包(API)
java.util.concurrent.atomic包ClassesAtomicBoolean AtomicInteger 比如这个,就是对int类型数据原子性操作的工具类。 AtomicIntegerArray AtomicIntegerFieldUpdater AtomicLong AtomicLongArray AtomicLongFieldUpdater AtomicMarkableReference AtomicReference AtomicReferen...原创 2020-07-05 01:20:12 · 206 阅读 · 0 评论 -
多线程基础讲解七: volatile关键字
首先volatile关键字有线程安全问题。volatile有一个专业术语:保证了可见性,不保证原子性。首先不使用volatile关键字,看看有什么效果public class NotUseVolatile implements Runnable { /** * 定义一个非volatile修饰的变量 */ private boolean falg = true; /** * 线程执行代码 */ public...原创 2020-07-05 00:39:21 · 287 阅读 · 0 评论 -
多线程基础讲解五: synchronized使用
多线程的锁有: synchronized 和 jdk1.5的Lock先说synchronized的各种用法:1. 使用任意同一对象做锁 (一定要是同一对象)2. 使用this做锁3. class字节码文件做锁4. 静态同步代码块做锁 (原理其实就是:class字节码文件做锁)5.非静态同步代码块做锁 (原理其实就是:使用this做锁)任意对象做锁例子:/** * @author: wangqinmin * @date : 2020/7/3 * @d...原创 2020-07-04 17:30:41 · 128 阅读 · 0 评论 -
多线程基础讲解四: 线程安全问题 (全局变量 与 局部变量,谁会有线程安全问题 ?)
什么是线程安全问题:当多个线程共享同一个全局变量,并做写的操作的时候,可能会受到其他线程的干扰,导致数据有问题,这种现象就叫做线程安全问题。全局变量 与 局部变量,谁会有线程安全问题 ?全局变量才会有线程安全问题。在方法内部的局部变量中,每个线程都有自己的局部变量,相互不会干扰。这里说全局变量有安全问题,就在说一个面试题(我面试全友家私的时候面试官问我的问题):String ,StringBuffer,StringBuilder 什么时候使用他们 ?首先,String是.....原创 2020-07-03 22:43:05 · 2794 阅读 · 0 评论 -
多线程基础讲解三: 等待线程 (用面试题理解join等待线程)
面试题: 创建3个线程,t1、t2、t3,让让t1在t2之前执行,t2在t3之前执行。核心:让其他线程变为等待状态,必须让join方法在其他线程内部调用。/** * @author: wangqinmin * @date : 2020/7/3 * @description: 仰天大笑出门去,我辈岂是蓬蒿人 */public class TestJoin { /** * 用一道面试题讲解join * <p> * 创建3个线程...原创 2020-07-03 21:42:34 · 152 阅读 · 0 评论 -
多线程基础讲解二: 守护线程 (让你真正的理解守护线程)
其实很多人,对守护线程并不理解。主要原因是: 测试很不好测,有外界因素干扰。所以这篇文章,只是让你认识守护线程,理解守护线程,千万不要纠结于为什么用@Test测试 和 用main方法测试。因为你如果反过来用@Test用main来测,结果刚刚相反。至于为什么:1.@Test 的4版本不支持多线程 2.main方法本身就是jvm启动的一个线程。没有足够理解多线程的时候,千万不要想这个问题。记得只看结果,不看过程。今天就用两个例子,好好的扒一下 守护线程。核心:当一个Java应用内只有...原创 2020-07-02 01:22:59 · 586 阅读 · 0 评论 -
多线程基础讲解一: 多线程与进程的理解(排除你对多线程的理解误区)
线程与进程的区别:1. 系统运行的每一个程序都是一个进程。比如java,QQ,微信,360安全卫士等。2. 一个进程可能有多个线程。比如java这个进程运行起来后,除了我们写的程序需要运行, 还有GC回收线程。总结: 进程是所有线程的集合,每一个线程是进程中的一条执行路径。多线程的作用: 提高程序运行效率。解释:cup运行效率是特别高的,你不用放在那里也是浪费。可以把cpu想象成是很多人的集合,如果是单线程,那么就是1个人,其他人全部休息。使用多线程的话,比如创建3个线程,就是在cpu原创 2020-06-30 20:28:18 · 272 阅读 · 0 评论