多线程
文章平均质量分 82
传a奇
这个作者很懒,什么都没留下…
展开
-
volatile能实现多线程同步吗???NO
Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了同步块 和 volatile 关键字机制。用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。但是volatile并不能进行原子性操作。举个例子:package com.blog.fenye;public class Counts { public static int c原创 2015-12-28 14:50:43 · 1014 阅读 · 0 评论 -
Java语言中的线程状态转换
Java语言定义了五种线程状态,在任意时间点,一个线程只能有且只有其中一种状态。新建(New) 创建后尚未启动的线程处于这种状态。运行(Runable) Runable包括操作系统线程状态中的Running和Ready,也就是出于此种状态的线程可能正在运行,也可能正在等待着CPU为它分配执行时间。无限期等待(Waiting) 处于该状态的线程不会被分配C原创 2016-01-02 14:49:59 · 472 阅读 · 0 评论 -
join()方法
join()方法是多线程编程中常用的方法,那么它的适用场合到底是怎样的呢?首先看一下官方解释。 很多情况下,主线程创建并启动子线程,如果子线程中要进行大量耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成后在结束,比如子线程处理的数据,主线程要取得在这个数据中的值,就要使用join()方法了,方法join()的作用是等待县城对象销毁。 官方解原创 2016-01-02 13:59:59 · 458 阅读 · 0 评论 -
CountDownLatch与CyclicBarrier
CountDownLatch 直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。当计数器count变为0时,所有线程不再等待,同时运行。 CountDownLatch的作用和 Thread.join()方原创 2016-01-06 12:20:45 · 428 阅读 · 0 评论 -
Synchroniazed和Lock实现生产者--消费者
使用Synchroniazed、wait、notify()实现代码如下:public class Test { private int queueSize = 10; private PriorityQueue queue = new PriorityQueue(queueSize); public static void main(String[] ar原创 2015-12-13 17:27:27 · 535 阅读 · 0 评论 -
实现阻塞队列
阻塞队列是Concurrent包下的类,常用的包括ArrayBlockingQueue和LinkedBlockingQueue,阻塞队列中put()和take()两个方法的实现从源码中华可以看出是用消费者-生产者模式实现的,下面就是自己实现的简单的ArrayBlockingQueue废话诗少说,直接上代码:/** * 一个简单的阻塞队列 */ class MyBlock原创 2016-01-26 11:50:30 · 952 阅读 · 0 评论 -
单例的DoubleCheck
说道DoubleCheck(双重检查锁),就要从懒汉单例模式说起。为了解决懒汉模式出现多例的情况,我们最容易想到的就是使用synchronized关键字。看下面代码:public class Myobject{ private static Myobject myobject; private Myobject(){} synchronized public st原创 2015-12-28 15:34:07 · 632 阅读 · 0 评论 -
CAS自旋锁
昨天写了篇关于AtomicInteger的博客,感觉觉还是不太完整,所以又把自旋锁的知识整理了一下。。。。。。。。。什么是自旋锁 说道自旋锁就要从多线程下的锁机制说起,由于在多处理器系统环境中有些资源因为其有限性,有时需要互斥访问(mutual exclusion),这时会引入锁的机制,只有获取了锁的进程才能获取资源访问。即每次只能有且只有一个进程能获取锁,才能进入自己的临界区原创 2016-01-05 15:03:20 · 4471 阅读 · 3 评论