05 2017 档案

摘要:CountDownLatch,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后, 计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务, 然后在闭锁上等待的线程就可以恢复执行任务。 应用场景:多个线程同时工作,然后其中几个可以随意并发执行,但有一个线程需要等其他线程工作结 阅读全文

posted @ 2017-05-25 18:45 一只小蜗牛12138 阅读(218) 评论(0) 推荐(0)

摘要:Semaphore叫做信号量 可以控制某个资源可被同时访问的个数, acquire() 获取一个许可,得到许可才能执行后面的代码,如果没有就等待。 release() 释放一个许可。 当信号量的只允许一个线程访问时,就变成了锁的功能。 下面代码演示 执行结果如下 每一秒钟只能允许一个线程执行。 阅读全文

posted @ 2017-05-16 18:59 一只小蜗牛12138 阅读(152) 评论(0) 推荐(0)

摘要:ReentrantLock类是可重入、互斥、实现了Lock接口的锁,它与使用synchronized方法和快具有相同的基本行为和语义,并且扩展了其能力。ReenreantLock类的常用方法有: ReentrantLock() : 创建一个ReentrantLock实例 ReentrantLock( 阅读全文

posted @ 2017-05-14 23:17 一只小蜗牛12138 阅读(174) 评论(0) 推荐(0)

摘要:先看一个例子,AtomicInteger 实现的线程安全的累加器 AtomicInteger源码分析 下面通过AtomicInteger的源码来看一下是怎么在没有锁的情况下保证数据正确性。首先看一下incrementAndGet方法的实现 注意::valueOffset叫做 偏移量 我们知道valu 阅读全文

posted @ 2017-05-11 19:05 一只小蜗牛12138 阅读(177) 评论(0) 推荐(0)

摘要:wait()/ notify()/ notifyAll() 任何Object对象都可以作为这三个方法的主调,但是不推荐线程对象调用这些方法。 1使用wait()、notify()和notifyAll()时需要首先对调用对象加锁【必须使用在同步代码块】2调用wait()方法后,线程状态会从RUNNIN 阅读全文

posted @ 2017-05-10 17:48 一只小蜗牛12138 阅读(175) 评论(0) 推荐(0)

摘要:先来看一个线程安全的例子 ,两个线程对count进行累加,共累加10万次。 随便运行多少次这个程序,都得不到正确的结果 200000 于是乎 引出今天的问题,线程安全问题。 怎么解决呢,有多种解决方法,现在来说2种, 第一种 在 Add 类的 run方法上 加synchronized 第二种 使用无 阅读全文

posted @ 2017-05-09 23:39 一只小蜗牛12138 阅读(137) 评论(0) 推荐(0)

摘要:守护线程 执行一些非业务方法,比如gc。当全部都是守护线程的时候,jvm退出 线程优先级 设置线程优先级:setPriority(int priorityLevel)。参数priorityLevel范围在1-10之间,值越大优先级越高, 能被执行到的概率越大,但非优先执行。 sleep() 让当前的 阅读全文

posted @ 2017-05-08 18:27 一只小蜗牛12138 阅读(162) 评论(0) 推荐(0)

摘要:我们知道线程线程有三种创建方式 1实现Runnable接口 2 继承Thread类 3使用Callable和Future接口创建线程。具体是创建Callable接口的实现类,并实现clall()方法。并使用FutureTask类来包装Callable实现类的对象,且以此FutureTask对象作为T 阅读全文

posted @ 2017-05-07 21:51 一只小蜗牛12138 阅读(194) 评论(0) 推荐(0)

导航