--------【多线程】
z-xiaoyao
这个作者很懒,什么都没留下…
展开
-
多线程--一不小心遇见你
最近刚刚接触了多线程,在此做一个简单的总结,和大家一起分享。1、实现多线程编程的方式: a、继承Thread类 b、实现Runnable接口2、常用方法start() 通知线程规划器此线程准备就绪,等待调用线程对象的run方法,注意执行start()方法的顺序不代表线程启动的顺序 Run方法前加synchronized关键字 使多个线程在执行run方法时,以排队的方式...原创 2018-02-28 17:39:20 · 338 阅读 · 16 评论 -
线程不安全的类与写法
什么是线程不安全的类呢? 如果一个类的对象同时被多个线程访问,如果不做特殊的同步或并发处理,很容易表现出线程不安全的现象,比如抛出异常、逻辑处理错误等,这种类我们就称为线程不安全的类 常见线程不安全的类有哪些呢 下图中,我们只画出了最常见的几种情况,我们常见的Collections集合都是线程不安全的 StringBuilder-demo@Slf4jpublic class Str...原创 2018-06-10 21:29:31 · 350 阅读 · 3 评论 -
aqs
AQS全称为AbstractQueuedSynchronizer,是并发容器中的同步器,AQS是J.U.C的核心,它是抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类都依赖它,如ReentrantLock、Semaphore、CyclicBarrier、ReentrantLock、Condition、FutureTask等。 AQS的特点: a、使用Node实...原创 2018-06-17 21:41:56 · 2239 阅读 · 7 评论 -
atomic
本篇博客我们主要讲述J.U.C包下的atomic包,在上篇博客“并发模拟”的最后,我们模拟高并发的情形时出现了线程安全问题,怎么解决呢?其实解决的办法有很多中,如直接在add()方法上加synchronized关键字,还有一种就是用atomic包下的类来解决这个问题,这也是现在比较推荐的一种写法,下面我们给出完整代码:@Slf4jpublic class CountExample2 { ...原创 2018-06-24 21:13:00 · 361 阅读 · 8 评论 -
线程池
相比于线程池,我们可能接触new Thread更多一点,既然有了new Thread我们为什么还要使用线程池呢? new Thread的弊端 a、每次new Thread新建对象,性能差 b、线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM(OutOfMemory) c、缺少更多功能,如更多执行、定期执行、线程中断 线程池的优...原创 2018-06-03 21:27:36 · 818 阅读 · 4 评论 -
多线程--volatile关键字
多线程中的volatile关键字,有以下特性volatile:1、强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值2、程安全包含原子性和可见性两个方面,java同步机制都是围绕这两个方面来确保线程安全的3、volatile本身并不处理数据的原子性,而是强制对数据的读写及时影响到主内存4、volatile关键字解决的是变量读取时的可见性问题,但无法保证原子性,对于多个线程访问一个实...原创 2018-03-25 20:27:30 · 280 阅读 · 25 评论 -
多线程--synchronized同步语句块
上篇博客说了同步方法,这篇博客我们来看一下同步语句块的相关内容。首先,一起学习一下基础知识。1、使用synchronized关键字声明方法,从运行时间上看,弊端明显2、当一个线程访问object的一个synchronized同步代码块时,另一个线程仍然可以访问该object对象中的非synchronized(this)同步代码块,所以仅将可能发生问题的代码块放即可3、当一个线程访问object的一...原创 2018-03-25 20:15:45 · 471 阅读 · 18 评论 -
多线程--synchronized同步方法
1、方法中的变量不存在非线程安全问题HasSelfPrivateNum publicclassHasSelfPrivateNum{ publicvoidaddI(Stringusername){ try{ intnum=0; if(username.equals("a")){ num=100; System.out.println("asetover"); Thread.sleep...原创 2018-03-04 14:33:38 · 270 阅读 · 11 评论 -
cas简析
在atomic包中,大多数类都是借助unsafe类来实现的,如以下代码 public static AtomicInteger count = new AtomicInteger(0); private static void add() { count.incrementAndGet(); } incrementAndGet()方法的...原创 2018-07-22 19:51:34 · 396 阅读 · 9 评论