java多线程
多线程学习,文章内容来源于 《Java 高并发程序设计》 一书
markfengfeng
这个作者很懒,什么都没留下…
展开
-
线程池
package multhread;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class ExecutorsDemo implements Runnable{ @Override原创 2020-06-14 21:06:04 · 111 阅读 · 0 评论 -
CountDownLatch 和 CyclicBarrier
CountDownLatch 可以让线程阻塞在别的线程执行之后。构造函数 new CountDownLatch(int count)。 count表示 countdown()要执行多少次,线程才能结束等待。countdown() 表示上述构造函数的 count 减去1。当 count 为 0 的时候 await 结束countDown具体使用示例如下:package multhread;import java.util.concurrent.CountDownLatch;public原创 2020-06-14 21:05:03 · 152 阅读 · 0 评论 -
线程挂起和唤醒,LockSupport
LockSupport 可以挂起和唤醒线程park() 和 unpark() 是两个静态方法分别表示挂起和唤醒unpark() 可以执行在 park() 之前。标识这个线程已经做过唤醒操作,线程会直接略过阻塞。package multhread;import java.util.concurrent.locks.LockSupport;public class LockSupportDemo implements Runnable{ @Override public void run(原创 2020-06-14 21:04:25 · 304 阅读 · 0 评论 -
读写锁,ReentrantReadWriteLock
读写锁是为了减少读操作的互斥,提高执行效率。同步具体表现为读读不互斥读写互斥写写互斥以下是一个基本的使用示例:package multhread;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWriteLockDemo{ private static ReentrantReadWriteLock l原创 2020-06-14 21:03:56 · 122 阅读 · 0 评论 -
信号量,Semaphore
信号量可以同时允许多个线程进入临界资源区。new Semaphore(int permits) //构造函数中指定允许的线程数量acquire() release() 分别表示获取信号量准许和释放准许public class SemaphoreDemo implements Runnable { final Semaphore semp = new Semaphore(5); @Override public void run() { try { //当前线程获取信号原创 2020-06-14 21:03:20 · 211 阅读 · 0 评论 -
重入锁,ReentrantLock 和 Condition 的使用
重入锁 ReentrantLock 主要特点:容易控制加锁的粒度。lock unlock等待锁的过程当中可以响应中断,lockInterruptibly可以有限时间内尝试获取锁, tryLock公平锁,尽量保证各个线程获取锁的公平使用 Condition 对线程进行等待和唤醒重入锁的基本使用 lock() 和 unlock() 分别加锁和释放锁,必须一一对应。class RetrantLockDemo implements Runnable{ private static Reentr原创 2020-05-11 23:36:05 · 319 阅读 · 0 评论 -
等待线程结束 join 和谦让 yield
join 表示当前线程要等待目标线程执行结束,然后继续执行当前线程。join有两个api.分别是//无限等待public final void join() throws InterruptedException//设置最长的等待时间,到了限制时间就不等待了public final syschronized void join(long millis) throws Interrupt...原创 2020-01-16 22:29:42 · 129 阅读 · 0 评论 -
线程挂起和唤醒,Object 的 wait 和 sinal
wait() 和 notify() 顾名思义一个是等待,一个是唤醒。分别表示线程的挂起和唤醒。两者都是Object类的方法。wait() 使用的时候必须注意在 synchronized 的代码块里执行。因为执行 wait 函数之前会先获取到目标对象的监视器,然后释放监视器,方便其他等待在这个目标对象上的线程可以继续执行下去。package demo1;public class Simp...原创 2020-01-16 22:29:16 · 635 阅读 · 0 评论 -
线程中断,stop() 和 interrupt()
正常来说线程里的代码执行完之后线程就自动中断了,但是一些处于无线循环当中的线程需要另外通过程序进行中断。stop(),顾名思义就是停止线程,但是当前这个api已经被废弃,不建议使用。原因是调用 stop() 会立即中断线程,无论线程执行到了哪里都立即停止,并且释放其占有的锁。这对于线程执行的完整性造成了破坏。例如下面这个例子package demo1;public class Stop...原创 2020-01-16 22:28:22 · 989 阅读 · 0 评论