- 博客(6)
- 收藏
- 关注
原创 6.ReentrantReadWriteLock读写锁
ReentrantReadWriteLock读写锁前言一、创建二、常用方法二、demo1.读锁和写锁是互斥的,读写线程交替执行2.多个线程可以获得读锁,两个读线程并列执行3.试一下tryLock方法前言读写锁允许多个线程同时读。但是在写的时候只有一个线程能获得写锁,读锁和写锁是互斥的。所以当有一个线程获得读锁时所有其他线程的读写操作都会被阻塞一、创建ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);//公平锁Reent
2021-03-22 22:26:43 117
原创 5.Semaphore CountDownLatch 和 CyclicBarrier
Semaphore CountDownLatch 和 CyclicBarrier前言一、CountDownLatch常用方法demo二、Semaphore常用方法demo三、CyclicBarrier构造函数常用方法demo前言java并发包下提供的三个并发工具类。Semaphore CountDownLatch 和 CyclicBarrier一、CountDownLatchCountDownLatch能够等待另外一些线程完成各自工作之后,再继续执行。常用方法void countDown()
2021-03-22 22:02:56 61
原创 4.volatile关键字和synchronized关键字
文章目录volatile关键字问题场景:主线程修改stop为true之后thread线程可能停不下来第一段程序为什么停止不了:volatile修饰之后:volatile关键字的两层语义synchronized关键字1. 修饰一个代码块2. 修饰一个方法3. 修改一个静态的方法4. 修改一个类volatile关键字作用:volatile修饰的共享变量保证了不同线程对其进行操作时的可见性。问题场景:主线程修改stop为true之后thread线程可能停不下来public class Volatile
2021-03-16 22:08:43 60
原创 3.异步任务Future
异步任务Future前言1.如何使用1.1 步骤1.2 demo2.Executors四种线程池的区别前言通过Runable和Thread, 无法获取子线程的运行结果。需要获取异步执行后的任务可以通过Future+Executors实现。1.如何使用1.1 步骤1)通过Executors类去创建一个线程池2)创建Task, 实现Callable接口。 重写call()方法去实现任务3)通过Executors.submit()去创建子线程去执行任务。4)executorService.sh
2021-02-23 22:57:31 189 1
原创 2.ThreadPoolExecutor线程池
ThreadPoolExecutor线程池前言通过ThreadPoolExecutor来创建一个线程池4个构造函数参数说明线程池规则前言为什么要创建线程池:频繁的创建线程和关闭线程会占用系统资源,增加系统负担,降低系统性能线程池原理:请求保存下来(如:队列),等有可用线程时就让线程从队列里取出一个请求进行处理线程池大小:一般需要根据任务的类型来配置线程池大小, 如果是CPU密集型任务,就需要尽量压榨CPU,参考值可以设为 NCPU+1。如果是IO密集型任务,参考值可以设置为2*NCPU
2021-02-19 22:42:47 117
原创 1.java多线程基础
java多线程基础1. 线程的创建1.1 继承Thread 重写run方法1.2 实现runable2. 常用方法2.1 currentThread()2.2 start()2.3 yield()2.4 sleep()2.5 join()2.6 wait/notify3. 线程状态其他守护线程和用户线程1. 线程的创建 两种方法:继承Thread,实现runable.1.1 继承Thread 重写run方法public class MyThread extends Thread { @Overr
2021-01-28 22:25:44 183 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人